次のようなリストがあるとしましょう:
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
別の可能性は、Nice purrr
ライブラリを使用します。
library(purrr)
map(x, 1)
あなたの例のリストのためにあなたはちょうどすることができます:
unlist(x)[ c(TRUE,FALSE) ]
しかし、それは正確に2つの要素を持つ各サブリストに依存します。
要素の数が異なる場合は、最初にsapply
を実行して長さを計算し、次に対応する最初の要素の位置を計算し(cumsum
を参照)、unlist
edからそれらの値を選択しますリスト。しかし、その時までに受け入れられた答えはおそらくはるかに簡単です。
すべてのサブリストの長さが同じである場合(ただし、2とは異なる場合があります)、次のようなことができます。
do.call( rbind, x)[,1]
または共通オブジェクトへのその他のキャスト。しかし、これはlapply
アプローチと同じくらい効率的だとは思いません。