R 循环迭代全局环境

R 循环迭代全局环境,r,iteration,R,Iteration,我希望通过全局环境(仅数据帧)进行迭代,并将其添加到.GlobalEnv列中的每个数据帧中。此外,此列的条目依赖于列表索引 因此,我想为dataframe1获取一个新列,其中包含索引[1]。对于dataframe2,我需要一个包含条目索引[2]的列,依此类推。 此外,更改应该直接对.GlobalEnv中的对象进行,因为数据帧包含NA,因此我无法使用list2env(dfs,.GlobalEnv)导出它们 我的尝试: index = c(a, b, c, d) dfs = lapply(filen

我希望通过全局环境(仅数据帧)进行迭代,并将其添加到.GlobalEnv列中的每个数据帧中。此外,此列的条目依赖于列表
索引

因此,我想为
dataframe1
获取一个新列,其中包含
索引[1]
。对于
dataframe2
,我需要一个包含条目
索引[2]
的列,依此类推。 此外,更改应该直接对.GlobalEnv中的对象进行,因为数据帧包含
NA
,因此我无法使用
list2env(dfs,.GlobalEnv)
导出它们

我的尝试:

index = c(a, b, c, d)
dfs = lapply(filenames, get) # dfs is a list of all the dataframes in the .GlobalEnv

for (i in index){
dfs = lapply(dfs, transform, Index = index[i])
}

list2env(dfs, envir = .GlobalEnv)
循环运行,但在
dfs
中没有任何更改,我不知道为什么。 对于
list2env
我收到错误消息:

"Error in list2env(dfs, envir = .GlobalEnv) : 
  names(x) must be a character vector of the same length as x"
因为在数据帧中有
NA

是否有更直接的方法来直接更改.GlobalEnv中的数据帧,以及如何通过一个数据帧列表正确地进行迭代,该列表中的条目针对每个数据帧进行更改(基于
索引
列表)

我在.GlobalEnv中检查了有关迭代的问题,但实际上,非GlobalEnv似乎使条目依赖于通过另一个列表进行迭代

提前感谢:)

变化:
对不起,我的描述不好。我有一个名为
dfs
的数据帧列表。 该列表包含n=78个独立的数据帧。然后我有第二个列表
索引
,其中包含n=78个“字符”条目。
我的意图是获取
dfs
的第一个元素,名为
dataframe1
,并在其中添加一列,其中包含
索引的第一个元素
名为
a
。对于
dfs
中的第二个数据帧
dataframe2
,我想添加一列,其中包含
index
的第二个元素,称为
b
,依此类推


完成此操作后,我想将更新后的
dfs
的单独数据帧导出到.GlobalEnv。但是,由于
dfs
中的独立数据帧包含
NA的
,这将不适用于
list2env(dfs,.GlobalEnv)
,我不完全理解这个问题,但我相信这里是接近它的

首先,创建一些数据,因为问题中没有数据

a <- 1
b <- 2
c <- 3
d <- 4
z <- 5

index <- c(a, b, c, d, z)

df1 <- iris
mt <- mtcars
diamonds <- as.data.frame(ggplot2::diamonds)

a注意
c(a,b,c,d)
只有当
a
b
等是具有自身值的变量时才有意义。@Rui Barradas我已经有
dfs
索引,因此不必生成:)。请参阅我的更改以更好地描述我的问题。谢谢!@Rui Barradas
index
是一个元素#1=
index[1]=a
-->
index=c(a、b、c、d等)的列表。因此
index$a``不起作用。@McGrager您还说dfs中的数据帧包含NA的So
list2env
不起作用。你能说得更具体些吗?dfs数据帧列包含
NA
?还有什么不适用于
list2env
objs <- ls()
lst <- mget(objs)
inx <- sapply(lst, class) == "data.frame"
objs <- objs[inx]
lst <- lst[inx]
lst <- lapply(seq_along(objs), function(i){
  DF <- lst[[i]]
  DF$Index <- index[[i]]
  DF
})
names(lst) <- objs
list2env(lst, envir = .GlobalEnv)
rm(lst)