假设我有一个这样的列表:
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)
小智 33
另一种可能性使用漂亮的purrr库:
library(purrr)
map(x, 1)
Run Code Online (Sandbox Code Playgroud)
对于您的示例列表,您可以这样做:
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方法一样有效.