我有一个输出大矩阵(Mat1)的函数和一个小数据帧(Smalldf1)我将它们存储在名为“Result”的列表中。 这个函数在循环中运行,所以我创建了许多版本的“Result”列表,直到我的循环结束....每次我将它们添加到名为“FINAL”的列表中。
在循环结束时,我最终得到一个名为FINAL的List,里面有许多较小的“Result”列表......每个列表包含一个小数据帧和一个大型Matrix。
我想将所有小数据帧组合在一起形成一个更大的数据帧并称之为DF1 - 我现在不知道如何访问这些我正在访问列表中的列表..?
这里的类似问题提供了这样的解决方案:
DF1 <- do.call("rbind",lapply(FINAL, function(x) x["Smalldf1"]))
然而,这会将输出显示为名为“Smalldf1”的单列,其中包含Smalldf1的描述...即字面上打印在列列表中(X1 =“xxx”,X2 =“xxx”,X3 =“xxx “)...我需要这个看起来像原始格式,3列容纳信息......?
任何帮助都会很棒。
答案 0 :(得分:0)
我对答案做出评论。这可能是您的数据:
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
)元素,然后使用do.call或者对此结果执行rbind 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上返回错误)