2017-04-15 38 views
0

我想對某個問題有一個通用的解決方案。 我有一個嵌套列表;此列表中的每個元素都是具有命名元素的列表。例如:連接列表中的向量

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元素。

+0

見'.mapply' - '.mapply(C,MYLIST,NULL)'或者,更方便的界面'? do.call(Map,c(c,mylist))'' –

回答

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

如果你想這樣做,使用tidyverse則:

library(tidyverse) 
purrr::transpose(mylist) %>% purrr::map(purrr::flatten)