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方法一样有效率。