2017-03-16 11 views
2

以下の結果リストのように、リストの2番目のリストをまとめて、cbindという2つのリストのリストである以下のbiglistの例のようなデータがあります。通常、私はlapply(biglist,cbind)のようなものを試してみるだろうが、私はリストのリストでそれを行う方法がわからない。cbindリストのリストの第2要素

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) 

答えて

2

多分、このようなものでしょうか?第二の要素をとる毎にリストから

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

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

、次いでunlistリストをINGのと列(ncol)の数がリストのlengthあろう行列に変換します。 purrrで

2

、あなたは

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 

アイデア文法にかかわらず、各サブリストの2番目の要素を抽出し、そのリストをパラメータとして渡すことです(実際にはsimplify2arraysapplyの範囲内にある)。希望の結果が示すようにカラムを反転させたい場合は、cbindの前にrevをチャックします。ここで

2

がronak-Shahの方法に関連mapply

mapply(`[[`, biglist, 2) 
# [,1] [,2] 
#[1,] 5 4 
#[2,] 4 6 
#[3,] 6 1 
1

と別のバージョンである、あなたは自動的に行列を生成、出力を簡素化したvapplyを使用することができます。

vapply(bigList, function(i) unlist(i[[2]]), FUN.VALUE=numeric(3)) 
    [,1] [,2] 
[1,] 5 4 
[2,] 4 6 
[3,] 6 1 
関連する問題