从列表列表

时间:2017-04-15 15:17:26

标签: r

我想对某个问题有一个通用的解决方案。 我有一个嵌套列表;此列表的每个元素都是一个包含命名元素的列表。例如:

mylist <- list(
  list(x1 = 1:10, x2 = letters[1:5]),
  list(x1 = 11:14, x2 = letters[6:15])
)

此处mylist[[1]]mylist[[2]]每个都有向量x1x2

我想连接所有x1向量和x2向量,例如获取:

c(mylist[[1]]$x1, mylist[[2]]$x1)
c(mylist[[1]]$x2, mylist[[2]]$x2)

但是对于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元素进行概括。

2 个答案:

答案 0 :(得分:1)

vecs <- unlist(mylist, recursive = F)
lapply(unique(names(vecs)), function(name) do.call(c, vecs[name == names(vecs)]))

答案 1 :(得分:0)

如果您想使用tidyverse然后执行此操作:

library(tidyverse)

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

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