我有一个输出大矩阵(MAT1)和一个小的数据框(Smalldf1)我将它们存储在一个名为“结果”列表中的功能。 该功能是在循环中运行,所以我创造了我的“结果”列表中的很多版本,直到我的循环结束....每个I将它们添加到一个名为“最后”名单的时间。
在我的循环结束时,我结束了一个被称为最后的名单,有内部许多较小的“结果”名单......每个都包含一个小数据框和一个大型矩阵。
我想rbind所有的小dataframes在一起形成一个更大的数据帧,并调用它DF1 - 我不知道我现在说我的列表中访问列表是如何访问这些..?
在这里一个类似的问题给了这样一个解决方案:
DF1 <- do.call("rbind",lapply(FINAL, function(x) x["Smalldf1"]))
然而,这给出的输出作为所谓的“Smalldf1”与Smalldf1的说明...即此单个列中的列的列表是从字面上印刷(X1 =“XXX”,X2 =“XXX”,X3 =“XXX”)。 ..我需要这个爆发看起来像原来的格式,3列房屋的信息......?
任何帮助将是巨大的。
我把我的意见变成一个答案。 这可能是你的数据:
df <- data.frame(X1=1:3, X2=4:6, X3=7:9)
FINAL=list(Result=list(Smalldf1=df, Mat1=as.matrix(df)),
Result=list(Smalldf1=df+1, Mat1=as.matrix(df+1)))
您可以结合lapply
提取第一(或第N个,只是改变1
)嵌套数组中的元素,然后做这个结果rbind,无论是与do.call或dplyr:
#### # Doing it in base R:
do.call("rbind", lapply(FINAL, "[[", 1) )
#### # Or doing it with dplyr:
library(dplyr)
lapply(FINAL, "[[", 1) %>% bind_rows
#### X1 X2 X3
#### 1 1 4 7
#### 2 2 5 8
#### 3 3 6 9
#### 4 2 5 8
#### 5 3 6 9
#### 6 4 7 10
这应该是您预期的结果
警告:使用解决方案dplyr
不适用于旧版本dplyr的工作(我测试dplyr_0.5.0,但它dplyr_0.2例如返回一个错误)