基本上,我想将多个列表合并到一个列表中。所有列表具有相同的结构。这是一个例子:
file1=list(A=1,B=2)
file2=list(A=2,B=3)
file3=list(A=3,B=4)
我知道mapply()
或Map()
有效。
> mapply(c, file1, file2, file3, SIMPLIFY=FALSE)
[[1]]
[1] 1 2 3
[[2]]
[1] 2 3 4
但问题是我实际上有500个列表,好吧,我可以确保将对象名称复制和粘贴500次。但是,我想学习如何有效地做到这一点。我有一个包含每500个列表名称的向量,如下所示,
lsNames=c("file1","file2","file3")
但我不知道如何开始,感谢任何帮助,谢谢。
答案 0 :(得分:6)
这是一个替代方案,通过构建然后评估OP中显示的同一个mapply()
调用来工作:
do.call(mapply, c(FUN=c, sapply(lsNames, as.symbol), SIMPLIFY=FALSE))
# $A
# file1 file2 file3
# 1 2 3
#
# $B
# file1 file2 file3
# 2 3 4
答案 1 :(得分:1)
我不确定这是否是您所追求的,但我已经编写了一个代码,可以将您从列表中转移到一个data.frame。
library(plyr)
file1 = list(A = 1, B = 2)
file2 = list(A = 2, B = 3)
file3 = list(A = 3, B = 4)
lsNames = c("file1", "file2", "file3")
# defining new list
my_list <- list()
# getting data from your objects file_1...file_n to new list
for(lsName in seq_along(lsNames)){
my_list[[lsName]] <- unlist(get(lsNames[lsName]))
}
# list to data.frame
my_df <-
ldply(my_list)
my_final_df <-
cbind(my_df, lsNames)
# a look at result
my_final_df
A B lsNames
1 1 2 file1
2 2 3 file2
3 3 4 file3