cbind列表列表的第二个元素

时间:2017-03-16 04:25:21

标签: r list lapply cbind

我有类似下面的biglist示例的数据,这是2个2的列表的列表。我想cbind每个列表中的第二个列表,如下面的结果示例。通常情况下,我会尝试类似lapply(biglist,cbind)的内容,但我不确定如何使用列表列表。

Data:
dput(biglist)
list(list(list(1, 2, 3), list(5, 4, 6)), list(list(5, 9, 2), 
list(4, 6, 1)))

Result:
dput(result)
structure(list(4, 6, 1, 5, 4, 6), .Dim = c(3L, 2L)

4 个答案:

答案 0 :(得分:2)

也许,这样的事情?

matrix(unlist(lapply(bigList, function(x) x[2])), ncol = length(bigList))

#     [,1] [,2]
#[1,]    5    4
#[2,]    4    6
#[3,]    6    1

从每个列表中取第二个元素然后unlist列表并将其转换为矩阵,其中列数(ncol)将是列表的length

答案 1 :(得分:2)

使用purrr,你可以做到

library(purrr)

bigList %>% map(2) %>% invoke(cbind, .)
##      [,1] [,2]
## [1,] 5    4   
## [2,] 4    6   
## [3,] 6    1 

或基础R等价物:

do.call(cbind, lapply(bigList, `[[`, 2))
##      [,1] [,2]
## [1,] 5    4   
## [2,] 4    6   
## [3,] 6    1 

或者,正如sapply简化的那样:

sapply(bigList, `[[`, 2)
##      [,1] [,2]
## [1,] 5    4   
## [2,] 4    6   
## [3,] 6    1 

无论语法如何,这个想法都是提取每个子列表的第二个元素,然后将该列表作为参数传递给cbind(嗯,simplify2array内的sapply。如果您希望按照所需结果显示相反的列,请在rev之前在cbind中放置<OwlCarousel> {this.loadPhotoComponent()} // add a new photo component from MongoDB object </OwlCarousel>

答案 2 :(得分:2)

以下是mapply

的另一个版本
mapply(`[[`, biglist, 2)
#   [,1] [,2]
#[1,] 5    4   
#[2,] 4    6   
#[3,] 6    1   

答案 3 :(得分:1)

与ronak-shah的方法相关,您可以使用vapply来简化输出,自动生成矩阵。

vapply(bigList, function(i) unlist(i[[2]]), FUN.VALUE=numeric(3))
     [,1] [,2]
[1,]    5    4
[2,]    4    6
[3,]    6    1