我有一个函数,输出一个大矩阵(Mat1)和一个小数据框(Smalldf1),我将它们存储在一个名为"Result"的列表中。这个函数在循环中运行,所以我创建了许多版本的"结果"列表,直到我的循环结束....每次我都将它们添加到一个名为"FINAL"的列表中。
在我的循环结束时,我结束了一个名为FINAL的列表,其中有许多较小的"结果"列表…每个包含一个小数据框和一个大矩阵。
我想将所有的小数据框绑定在一起,形成一个更大的数据框,并将其称为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。调用或使用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上返回一个错误,例如)