select嵌套列表的第一个元素
比方说,我有这样一个列表:
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)
对于你的例子列表,你可以做:
unlist(x)[ c(TRUE,FALSE) ]
但这取决于每个子列表恰好有2个元素。
如果有不同数量的元素,则可以首先计算长度,然后计算相应的第一个元素位置(请参阅cumsum
),然后unlist
列出的列表中select这些值。 但到那个时候,接受的答案可能要简单得多。
如果所有的子列表具有相同的长度(但可以不同于2),那么你可以做一些事情:
do.call( rbind, x)[,1]
或其他一些投向一个共同的对象。 但是,我怀疑这是否和lapply
方法一样有效率。