2017-05-24 12 views
0

私はリストのリストを持っています。各サブリストは同じ名前の同じ数の要素を持ちます。そのような:R:サブリストを単一のリストにアンラップ

l <- list(list(a=1, b=2), list(a=3, b=4), list(a=5, b=6)) 

私は結果のリストには2つの要素だけ、各リストを有するように、私は次のことを得るしたいすべての元のデータ、すなわちを含む名前で、内部サブリストを再配置したいと思いますリスト:

desired_list <- list(a=list(1, 3, 5), b=list(2, 4, 6)) 

これを行う最も効率的な方法は何ですか?

+0

リストは、せいぜい2つのレベルがありますか? –

答えて

2

あなたはpurrr::transposeを使用することができます。

pl <- purrr::transpose(l) 

identical(desired_list, pl) 
# [1] TRUE 

alernativeベースRの方法を、do.call(Map, ...)を使用します。

# pass all the sublists to the Map method, and collect them as lists 
bl <- do.call(Map, c(f=list, l)) 

identical(desired_list, bl) 
# [1] TRUE 
+1

これらの方法の両方で、すべての 'a'と' b'が各ネストされたリストに対して同じ順序であることが必要であることを指摘する価値はありますか?例えば。リスト(a = 1、b = 2)、リスト(a = 3、b = 4)、リスト(b = 6、a = 5)) ' –

+0

特定の場合、リスト要素*は同じ順序で*です。しかし、質問を一般化してバックアップを開く方が理にかなっているなら、私はします。 – NLi10Me

+0

私は、Mapとdo.callを読んで基底Rメソッドを理解しようとしていますが、本当にここで何が起きているのかは自明ではありません。 マップはlのすべての要素のリストを呼び出しますか? – NLi10Me

関連する問題