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

Ale*_*lex 66 r list

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

x = list(list(1,2), list(3,4), list(5,6))
Run Code Online (Sandbox Code Playgroud)

我想要一个只包含嵌套列表的第一个元素的列表.我可以通过返回另一个列表来做到这一点

x1 = lapply(x, function(l) l[[1]])
Run Code Online (Sandbox Code Playgroud)

这有快捷符号吗?

A5C*_*2T1 112

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

lapply(x, `[[`, 1)
# [[1]]
# [1] 1
#
# [[2]]
# [1] 3
#
# [[3]]
# [1] 5
Run Code Online (Sandbox Code Playgroud)

  • (另外它看起来比匿名功能更酷......) (7认同)
  • @MehradMahmoudian,一个更好看的地方是"摘录"(https://stat.ethz.ch/R-manual/R-devel/library/base/html/Extract.html). (2认同)

小智 33

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

library(purrr)
map(x, 1)
Run Code Online (Sandbox Code Playgroud)

  • 对于那些想知道的人,这是有效的,因为 `map` 将数值解释为提取,例如 `[[` (6认同)
  • 使用 purrr::map() 通过指定包解决了一些错误。 (2认同)

Gre*_*now 9

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

unlist(x)[ c(TRUE,FALSE) ]
Run Code Online (Sandbox Code Playgroud)

但这取决于每个子列表恰好有2个元素.

如果有不同数量的元素,那么您可以首先sapply计算长度,然后计算相应的第一个元素位置(请参阅参考资料cumsum),然后从unlisted列表中选择这些值.但到那时,接受的答案可能要简单得多.

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

do.call( rbind, x)[,1]
Run Code Online (Sandbox Code Playgroud)

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