2016-10-29 5 views
0

の同じインデックス&深さレベルの要素を抽出すると、リストである:Rは:リストここ

# Build a toy list 
x1=letters[1:3] 
x2=letters[4:5] 
x3=letters[1:8] 
toy_list=list(list(list("ABX",x1), 
        list("ZHK",x2)), 
       list(list("CCC",x3))) 

[[1]] 
[[1]][[1]] 
[[1]][[1]][[1]] 
[1] "ABX" 

[[1]][[1]][[2]] 
[1] "a" "b" "c" 


[[1]][[2]] 
[[1]][[2]][[1]] 
[1] "ZHK" 

[[1]][[2]][[2]] 
[1] "d" "e" 



[[2]] 
[[2]][[1]] 
[[2]][[1]][[1]] 
[1] "CCC" 

[[2]][[1]][[2]] 
[1] "a" "b" "c" "d" "e" "f" "g" "h" 

のは、私が「深いレベル」で、第二の位置に、例えば、すべての要素を抽出したいとしましょう他の方法では、インデックス[[1]][[1]][[2]][[1]][[2]][[2]][[2]][[1]][[2]]の要素を抽出したいと思います。つまり、出力を

[[1]] 
[1] "a" "b" "c" 

[[2]] 
[1] "d" "e" 

[[3]] 
[1] "a" "b" "c" "d" "e" "f" "g" "h" 

とすることを意味します。これは一般的な方法でどうしますか?

答えて

1

purrrを使用すると、at_depth(2, ...)(2は深さレベルを表し、...は抽出子(名前/整数)または関数)を使用できます。私はそれが何度も何度もライブラリをインストールするために来るときに少し消極的だけど、あなたのソリューションがとても美しいです、その後

library(purrr) 

toy_list %>% at_depth(2, 2) %>% flatten() 

## [[1]] 
## [1] "a" "b" "c" 
## 
## [[2]] 
## [1] "d" "e" 
## 
## [[3]] 
## [1] "a" "b" "c" "d" "e" "f" "g" "h" 
+0

を構造を簡素化...あなたは、例えば、 'lapply'でそれをハック可能性が –

+0

'lapply(toy_list、function(x){lapply(x、function(y){y [[2]}}})')、それは完全に平坦化されません。 – alistaire

+0

トリックのためのthks –