Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按索引组合列表的元素_R_List - Fatal编程技术网

R 按索引组合列表的元素

R 按索引组合列表的元素,r,list,R,List,考虑以下列表: 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中的向量合并,以此类推 这是我希望实现的结果: res = list(c(1,2,5,6,9,10), c(3,4,7,8,11,12)) 我

考虑以下列表:

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中的向量合并,以此类推

这是我希望实现的结果:

res = list(c(1,2,5,6,9,10), c(3,4,7,8,11,12))
我知道,如果有两个单独的列表,可以通过以下方式实现:

mapply(c, lst1, lst2)
但是,我不知道如何使用列表列表复制相同的逻辑

有什么有效的方法可以做到这一点吗?请记住,实际上,
lst
是一个包含5000个列表的列表,每个基础列表包含大量向量

谢谢

您可以执行以下操作:

do.call(Map, c(c, lst))

你走对了方向:

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

我在寻找一些与OP的问题类似的东西。。。但是使用数据帧列表而不是向量。在这种情况下,稍微修改上面@joran的答案就可以得到想要的结果。考虑:

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))
    }) 

mylist可能
sapply(1:length(lst)function(j)list[[j]][[1]])
和类似的,但以
[[2]]
结尾就足够了?问题是,在现实中,每个单独的列表包含多个向量,而不仅仅是2个。无限期地为每个向量写相同的方程是不可行的。我想我们的基本相同,但是
Map
肯定更干净。我不确定为什么我在将它应用于实际问题时会出现以下错误:
匹配中的错误。乐趣(f):“100”不是函数、字符或符号
…也许你有一个变量
c
thar的值为
100
。您可以将上面的
c
替换为
base::c
。非常感谢。如果基础列表中的元素是矩阵,而不是向量,那么这会起作用吗?
Map
类似于
mapply
SIMPLIFY=FALSE
。我建议您尝试
do.call(Map,c(cbind,lst))
,但如果没有示例,很难准确地说出。非常感谢!如果每个基础列表都包含矩阵而不是向量,那么我想合并彼此相邻的矩阵。我怎样才能使你的公式适应这样做?
library(dplyr)
mylist2 <- do.call(function(...) mapply(bind_rows, ..., SIMPLIFY=F), args = mylist)