我有类似下面的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)
答案 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