Seems like a basic question and perhaps I\'m just missing something obvious ... but is there any way to pluck
a sublist (with purrr
)?
More specifically
Similar to jzadra's post, you could also do:
l %>% keep(names(.) %in% c("a","b"))
Here's my take on it. Not based on purrr
thus slightly off topic, but compatible with the tidyverse
's general interface principle of playing nicely with pipes.
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
There's clearly a need for "muti-value pluck". It really comes down to extending flexibility of "pluck" to retrieving multiple values from the same level of list, as described in this github issue. For the example above, you can probably get away with:
> purrr::map(purrr::set_names(c("a", "b")),
~purrr::pluck(l, .x, .default = NA_character_))
#> $a
#> [1] "foo"
#>
#> $b
#> [1] "bar"
I think that purrr::keep()
does what you want.
l %>% keep(names(.) == "a" | names(.) == "b")