我創建了一個包含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")
我怎樣才能得到三個dataframes,A,B和C?
我創建了一個包含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")
我怎樣才能得到三個dataframes,A,B和C?
您可以使用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
例如。
有該功能...
list2env(L , .GlobalEnv)
但是就像詹姆斯說,你需要有一個很好的理由不想讓他們在列表中。使用列表比使用單獨的data.frame
s更容易。你想做什麼。
這讓我想起了,但詹姆斯已經發布了一個更好的答案(本質上是相同的,但不太酷),然後西蒙,甚至更好。只是爲了完整性我會扔它,但聽取他們的警告:
for (i in seq_along(L)) {
assign(names(L)[i], L[[i]], .GlobalEnv)
}
編輯
根據康拉德的回答我才意識到,你可以這樣做:
for (i in names(L)) {
assign(i, L[[i]], .GlobalEnv)
}
我沒有知道for
循環可以使用非索引。涼。
爲什麼你迭代指數而不是名字?你永遠不需要指數。 –
@Knonrad我完全同意這一點,正如我所說的,但是也承認它是迄今爲止最薄弱的解決方案,儘管遍歷名稱(據我所知,你所說的)需要'lapply'不是'for'循環。 –
@Simon看到我的編輯,我剛剛意識到這一點。 –
我總是忘記這一點,並多次看到它+1。 –
這是一個很好的認識+1 – James
謝謝Janmes和Simon。他們非常有幫助。我爲自己創建了這個列表,但我的同事有時會使用一些單個文件。所以,我與他們分享。 –