选择嵌套列表的第一个元素

时间:2013-12-06 16:23:09

标签: r list

假设我有一个这样的列表:

x = list(list(1,2), list(3,4), list(5,6))

我想要一个只包含嵌套列表的第一个元素的列表。我可以通过返回另一个列表

来做到这一点
x1 = lapply(x, function(l) l[[1]])

是否有快捷符号?

5 个答案:

答案 0 :(得分:102)

没有太多捷径,但你可以这样做:

lapply(x, `[[`, 1)
# [[1]]
# [1] 1
#
# [[2]]
# [1] 3
#
# [[3]]
# [1] 5

答案 1 :(得分:30)

另一种可能性是使用漂亮的purrr库:

library(purrr)
map(x, 1)

答案 2 :(得分:9)

对于您的示例列表,您可以这样做:

unlist(x)[ c(TRUE,FALSE) ]

但这取决于每个子列表正好有2个元素。

如果有不同数量的元素,那么你可以先用sapply来计算长度,然后计算相应的第一个元素位置(参见cumsum),然后从{{unlist中选择这些值。 1}} ed list。但到那时,接受的答案可能要简单得多。

如果所有子列表具有相同的长度(但可能与2不同),那么您可以执行以下操作:

do.call( rbind, x)[,1]

或其他一些演员到一个共同的对象。但我怀疑这与lapply方法一样有效。

答案 3 :(得分:1)

我们可以使用pluck中的rvest来从每个嵌套列表中选择第一个元素

rvest::pluck(x, 1)
#[[1]]
#[1] 1

#[[2]]
#[1] 3

#[[3]]
#[1] 5

请注意,使用pluck的{​​{1}}与选择第一个元素(purrr)的结果不同

x[[1]]

答案 4 :(得分:0)

并非完全简短的表示法,但是也可以通过折叠来实现:

Reduce(function(a, b) c(a, b[1]), x, init = c()) 

# [[1]]
# [1] 1
# 
# [[2]]
# [1] 3
# 
# [[3]]
# [1] 5