我创建了一个包含72个元素的R列表。我如何将此文件取消归档到72个具有每个元素名称的单个数据帧?
以下是一个例子:
L <- list(data.frame(matrix(1:4,2,2)),
data.frame(matrix(9:12,2,2)),
data.frame(matrix(5:8,2,2)))
names(L)<-c("a","b","c")
如何获得三个数据帧a,b和c?
答案 0 :(得分:7)
有一个功能......
list2env( L , .GlobalEnv )
但是像James说的那样,你需要有充分的理由不想将它们保存在列表中。使用列表要比72个单独的data.frame
更容易!你想做什么。
答案 1 :(得分:2)
您可以将assign
用于lapply
内的全局环境。注意我已将调用包装在invisible
中,以避免将输出打印到控制台。
invisible(lapply(names(L),function(x) assign(x,L[[x]],.GlobalEnv)))
ls()
[1] "a" "b" "c" "L"
a
X1 X2
1 1 3
2 2 4
但是,虽然元素在列表中,但使用lapply
可能更容易使用它们。
答案 2 :(得分:1)
我想到了这一点,但詹姆斯已经发布了一个更好的答案(基本上是我的相同,但不那么酷)然后西蒙甚至更好。为了完整起见,我会把它扔掉,但要留意他们的警告:
for (i in seq_along(L)) {
assign(names(L)[i], L[[i]], .GlobalEnv)
}
修改强>
根据Konrad的回应,我意识到你可以做到:
for (i in names(L)) {
assign(i, L[[i]], .GlobalEnv)
}
我不知道for
循环可以使用非索引。凉。