Does a multi-value purrr::pluck exist?

前端 未结 4 791
既然无缘
既然无缘 2021-02-19 11:49

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

相关标签:
4条回答
  • 2021-02-19 11:58

    Similar to jzadra's post, you could also do:

    l %>% keep(names(.) %in% c("a","b"))
    
    0 讨论(0)
  • 2021-02-19 12:02

    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
    
    0 讨论(0)
  • 2021-02-19 12:03

    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"
    
    0 讨论(0)
  • 2021-02-19 12:22

    I think that purrr::keep() does what you want.

    l %>% keep(names(.) == "a" | names(.) == "b")

    0 讨论(0)
提交回复
热议问题