r - purrr::pluck - 如何获取列表的最后一个元素

我正在尝试提取嵌套列表的最后一个元素。我如何用 purrr 做到这一点?在下面的示例中,结果应该是所有值为“c”的元素。 我看过this ,但我对使用 purrr 的解决方案特别感兴趣。

非常感谢

x <- list(list(1,2,"c"), list(3,"c"), list("c"))
x
#> [[1]]
#> [[1]][[1]]
#> [1] 1
#> 
#> [[1]][[2]]
#> [1] 2
#> 
#> [[1]][[3]]
#> [1] "c"
#> 
#> 
#> [[2]]
#> [[2]][[1]]
#> [1] 3
#> 
#> [[2]][[2]]
#> [1] "c"
#> 
#> 
#> [[3]]
#> [[3]][[1]]
#> [1] "c"

map(x, purrr::pluck, tail)
#> Error in map(x, purrr::pluck, tail): could not find function "map"
map(x, purrr::pluck, length(x))
#> Error in map(x, purrr::pluck, length(x)): could not find function "map"

由 reprex package 创建于 2021-05-21 (v2.0.0)

最佳答案

简单地使用purrr::pluck:

library(purrr)

map(x, ~ pluck(.x, length(.x)))

或者更容易使用dplyr::last:

library(purrr)
library(dplyr)

map(x, last)

在基 R 中,反转每个列表元素并取第一项:

lapply(x, function(y) rev(y)[[1]])

lapply(x, \(y) rev(y)[[1]]) # R >= 4.1.0

或者

mapply(`[[`, x, sapply(x, length), SIMPLIFY = F)

如果删除参数 SIMPLIFY = F 将返回单个向量,因为默认值为 TRUE

这是通过并行遍历列表 xsapply(x, length) 的输出并将其应用于函数 `[[` 这是一个提取运算符。

https://stackoverflow.com/questions/67633132/

相关文章:

firebase - 参数类型 'Object?' 无法分配给参数类型 'Map

python - 在 [任何以前的版本] 之前的 Python 中这可能吗

typescript - noFallthroughCasesInSwitch - 明确允许失败

reactjs - 错误 : Final loader (./node_modules/awesom

go - 为什么 math.Pow 的性能比位移差?

go - 为什么一个空 slice 有 24 个字节?

javascript - 如何在 VueJS 中处理插槽的 onClick 事件

c# - 为什么将 List 转换为 Array 而不是在 C# 中引用?

windows - 将 Systems Internals 列为制造商的 Windows 服务的名称

azure-devops - Azure DevOps Pipeline 永远停留在 Pending