假设我有一个这样的列表:
x = list(list(1,2), list(3,4), list(5,6))
我想要一个只包含嵌套列表的第一个元素的列表。我可以通过返回另一个列表
来做到这一点x1 = lapply(x, function(l) l[[1]])
是否有快捷符号?
答案 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