我想对某个问题有一个通用的解决方案。 我有一个嵌套列表;此列表的每个元素都是一个包含命名元素的列表。例如:
mylist <- list(
list(x1 = 1:10, x2 = letters[1:5]),
list(x1 = 11:14, x2 = letters[6:15])
)
此处mylist[[1]]
和mylist[[2]]
每个都有向量x1
和x2
。
我想连接所有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
元素进行概括。
答案 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)