似乎是一个基本问题,也许我只是缺少一些明显的问题……但是有什么办法可以pluck使子列表(带有purrr)?更具体地说,这是一个初始列表:
l <- list(a = "foo", b = "bar", c = "baz")
Run Code Online (Sandbox Code Playgroud)
我想返回仅包含元素a和的新(子)列表b。通常,我只做“基础” R子列表:
l[c("a", "b")]
Run Code Online (Sandbox Code Playgroud)
但这不能很好地.default处理pluck。我的理解是采摘可以“替代” [[,但是有purrr替代替代品[吗?
这是我的看法。不是基于purrr因此稍微偏离主题的,而是与tidyverse与管道完美配合的一般界面原则兼容。
pluck_multiple <- function(x, ...) {
`[`(x, ...)
}
x <- list(a = 1, b = 2, c = list(x = TRUE, y = FALSE))
pluck_multiple(x, c("a", "b"))
#> $a
#> [1] 1
#>
#> $b
#> [1] 2
pluck_multiple(x, 2:3)
#> $b
#> [1] 2
#>
#> $c
#> $c$x
#> [1] TRUE
#>
#> $c$y
#> [1] FALSE
Run Code Online (Sandbox Code Playgroud)
小智 5
类似于 jzadra 的帖子,你也可以这样做:
l %>% keep(names(.) %in% c("a","b"))
Run Code Online (Sandbox Code Playgroud)