R 从列表列表中连接向量

R 从列表列表中连接向量,r,R,我想对某个问题有一个普遍的解决办法。 我有一个嵌套列表;此列表的每个元素都是一个包含命名元素的列表。例如: mylist <- list( list(x1 = 1:10, x2 = letters[1:5]), list(x1 = 11:14, x2 = letters[6:15]) ) 但对于mylist可能有n个元素的一般情况 如果我事先知道mylist只有两个元素,那么我可以使用 do.call(function(a,b) c(a$x1, b$x1), mylist) do

我想对某个问题有一个普遍的解决办法。 我有一个嵌套列表;此列表的每个元素都是一个包含命名元素的列表。例如:

mylist <- list(
  list(x1 = 1:10, x2 = letters[1:5]),
  list(x1 = 11:14, x2 = letters[6:15])
)
但对于mylist可能有n个元素的一般情况

如果我事先知道mylist只有两个元素,那么我可以使用

do.call(function(a,b) c(a$x1, b$x1), mylist)
do.call(function(a,b) c(a$x2, b$x2), mylist)

但我不知道如何将其推广到n个元素。

如果要使用,则:

根据@jbaums的评论进行编辑,注意flatte返回的是列表而不是向量:

purrr::transpose(mylist) %>% purrr::map(unlist)

请参阅?.mapply-.mapplyc,mylist,NULL或更方便的接口do.callMap,cc,mylist这将需要额外的%>%lapplyunlist,或者可能需要一个tidyverse替代方案。但是你也可以只做purrr::transposemylist%>%lapplyunlist。这一点很好。purrr::flatte将输出保留为列表。类型变体flatte_chr和flatte_dbl在不增加检查x1和x2类型的复杂性的情况下无法工作,而且x1和x2类型的稳定性尚不清楚。
vecs <- unlist(mylist, recursive = F)
lapply(unique(names(vecs)), function(name) do.call(c, vecs[name == names(vecs)]))
library(tidyverse)
purrr::transpose(mylist) %>% purrr::map(unlist)