私がこのようなリストを持っているとしましょう:
x = list(list(1,2), list(3,4), list(5,6))
ネストされたリストの最初の要素のみを含むリストが欲しいのですが。私はそのように別のリストを返すことによってこれを行うことができます
x1 = lapply(x, function(l) l[[1]])
このためのショートカット表記はありますか?
回答:
ショートカットはそれほど多くありませんが、次のことができます。
lapply(x, `[[`, 1)
# [[1]]
# [1] 1
#
# [[2]]
# [1] 3
#
# [[3]]
# [1] 5
別の可能性は素晴らしいpurrr
ライブラリを使用します:
library(purrr)
map(x, 1)
map
は数値を抽出として解釈するので機能します[[
あなたのサンプルリストのためにあなたはただすることができます:
unlist(x)[ c(TRUE,FALSE) ]
しかし、それは正確に2つの要素を持つ各サブリストに依存します。
要素の数が異なる場合は、最初にを実行しsapply
て長さを計算し、次に対応する1番目の要素の位置を計算して(を参照cumsum
)、unlist
edリストからそれらの値を選択します。しかし、その時までに、受け入れられた答えはおそらくはるかに簡単です。
すべてのサブリストの長さが同じである場合(ただし、2とは異なる場合があります)、次のようにすることができます。
do.call( rbind, x)[,1]
または共通のオブジェクトへの他のキャスト。しかし、これがlapply
アプローチと同じくらい効率的であるとは思えません。