考虑以下列表清单:
lst = list(list(c(1,2), c(3,4)),list(c(5,6), c(7,8)),list(c(9,10), c(11,12)))
列表lst
包含三个列表,每个列表包含两个向量作为元素。我想通过索引组合底层列表的元素。换句话说,我想将列表1中的向量1与列表2和列表3中的向量1合并,将列表1中的向量2与列表2和列表3的向量2等合并......等等。
这是我希望实现的结果:
res = list(c(1,2,5,6,9,10), c(3,4,7,8,11,12))
我知道如果有两个单独的列表,可以按如下方式实现:
mapply(c, lst1, lst2)
但是,我不确定如何使用列表列表复制相同的逻辑。
任何有效的方法来实现这一目标?请记住,实际上,lst
是一个包含5000个列表的列表,每个基础列表都包含大量向量。
谢谢!
答案 0 :(得分:17)
你可以这样做:
do.call(Map, c(c, lst))
答案 1 :(得分:6)
你走在正确的轨道上:
do.call(function(...) mapply(c,...,SIMPLIFY = FALSE),args = lst)
[[1]]
[1] 1 2 5 6 9 10
[[2]]
[1] 3 4 7 8 11 12
答案 2 :(得分:1)
I was looking for something along the lines of the OP's question... but with a list of data frames instead of vectors. In that case, slightly modifying @joran's answer above gives the desired result. Consider:
mylist <-
lapply(1:2, function(y){
df1 <- data.frame(a=y, b=y^2, c=y^3)
df2 <- data.frame(d=y, e=y+1)
return(list(df1=df1, df2=df2))
})
You can then re-combine the sub-list elements into separate data frames based on their common indexes:
library(dplyr)
mylist2 <- do.call(function(...) mapply(bind_rows, ..., SIMPLIFY=F), args = mylist)