2017-03-11 21 views
2

私は、次のyのネストされたリストだ:私は、このネストされたリストからすべての要素を抽出し、1つのレベルのリストにそれらを置くのが好きなので、私の考えR:1つのレベルのリストにネストされたリストに変換

x1=c(12,54,2) 
x2=c(2,88,1) 
x3=c(4,8) 

y=list() 
y[[1]]=x1 
y[[2]]=list(x2,x3) 

y 
[[1]] 
[1] 12 54 2 

[[2]] 
[[2]][[1]] 
[1] 2 88 1 

[[2]][[2]] 
[1] 4 8 

を期待される結果は次のようになります。

y_one_level_list 
[[1]] 
[1] 12 54 2 

[[2]] 
[1] 2 88 1 

[[3]] 
[1] 4 8 

明らかミリアンペア本当の問題、あなたがそれを解決する方法を、より深くネストされたリストを伴いますか?私はrapplyを試みたが失敗した。

+0

[使用](http://stackoverflow.com/a/41882883/7128934)。 –

+0

@ d.b残念ながら、いいえ、私はこのポストを見て、それは期待される結果をもたらさない。 –

+1

@ d.bはい最初の投稿は機能します。どうもありがとう!! –

答えて

2

rapplyと一緒lapplyをお試しください:

lapply(rapply(y, enquote, how="unlist"), eval) 

#[[1]] 
#[1] 12 54 2 

#[[2]] 
#[1] 2 88 1 

#[[3]] 
#[1] 4 8 

それはどちらかの深いリストのために働くありません。

+1

Yeaaahそれはまた、それを行うよりエレガントな方法で動作します –

2

あなたはこれを試すことができます。

flatten <- function(lst) { 
    do.call(c, lapply(lst, function(x) if(is.list(x)) flatten(x) else list(x))) 
} 

flatten(y) 

#[[1]] 
#[1] 12 54 2 

#[[2]] 
#[1] 2 88 1 

#[[3]] 
#[1] 4 8 
+1

Thks、私はそのシンプルさのために989を授与します –

関連する問題