将所有列名传递给 mutate() 内的 pmap()

pass all column names to pmap() inside mutate()

mutate 中执行 pmap 时,我经常喜欢使用以下结构,这样我就可以在 map 函数中引用普通列名而不是 ..1..2 等,并且必须跟踪我给他们的顺序:

library(tidyverse)

mtcars %>%
  nest(data = -c(vs, am, gear, carb)) %>%
  mutate(plot = pmap(lst(vs, am, gear, carb, data), ~with(list(...), {
    
    # not relevant to question, just example task:
    ggplot(data = data, aes(x = wt, y = mpg)) + geom_point() +
      labs(subtitle = (paste0("am=", am, "\n",
                             "carb=", carb, "\n",
                             "gear=", gear, "\n",
                             "vs=", vs)))
  })))
#> # A tibble: 14 x 6
#>       vs    am  gear  carb data             plot  
#>    <dbl> <dbl> <dbl> <dbl> <list>           <list>
#>  1     0     1     4     4 <tibble [2 x 7]> <gg>  
#>  2     1     1     4     1 <tibble [4 x 7]> <gg>  
#>  3     1     0     3     1 <tibble [3 x 7]> <gg>  
#>  4     0     0     3     2 <tibble [4 x 7]> <gg>  
#>  5     0     0     3     4 <tibble [5 x 7]> <gg>  
#>  6     1     0     4     2 <tibble [2 x 7]> <gg>  
#>  7     1     0     4     4 <tibble [2 x 7]> <gg>  
#>  8     0     0     3     3 <tibble [3 x 7]> <gg>  
#>  9     1     1     4     2 <tibble [2 x 7]> <gg>  
#> 10     0     1     5     2 <tibble [1 x 7]> <gg>  
#> 11     1     1     5     2 <tibble [1 x 7]> <gg>  
#> 12     0     1     5     4 <tibble [1 x 7]> <gg>  
#> 13     0     1     5     6 <tibble [1 x 7]> <gg>  
#> 14     0     1     5     8 <tibble [1 x 7]> <gg>

我的问题是,我可以在 lst() 中放入什么,以便将所有列传递给映射函数,而不是像上面那样将它们全部写出?我尝试了 names(.)!!!names(.) 作为我的第一次尝试。或者,如果有更简洁的方法来做到这一点,比如不使用 lst(),那也很好。

要传递所有内容,您可以使用 . 而无需单独指定每一列。

library(tidyverse)

mtcars %>%
  nest(data = -c(vs, am, gear, carb)) %>%
  mutate(plot = pmap(., ~with(list(...), {
    # not relevant to question, just example task:
    ggplot(data = data, aes(x = wt, y = mpg)) + geom_point() +
      labs(subtitle = (paste0("am=", am, "\n",
                              "carb=", carb, "\n",
                              "gear=", gear, "\n",
                              "vs=", vs)))
  })))

#      vs    am  gear  carb data             plot  
#   <dbl> <dbl> <dbl> <dbl> <list>           <list>
# 1     0     1     4     4 <tibble [2 × 7]> <gg>  
# 2     1     1     4     1 <tibble [4 × 7]> <gg>  
# 3     1     0     3     1 <tibble [3 × 7]> <gg>  
# 4     0     0     3     2 <tibble [4 × 7]> <gg>  
# 5     0     0     3     4 <tibble [5 × 7]> <gg>  
# 6     1     0     4     2 <tibble [2 × 7]> <gg>  
# 7     1     0     4     4 <tibble [2 × 7]> <gg>  
# 8     0     0     3     3 <tibble [3 × 7]> <gg>  
# 9     1     1     4     2 <tibble [2 × 7]> <gg>  
#10     0     1     5     2 <tibble [1 × 7]> <gg>  
#11     1     1     5     2 <tibble [1 × 7]> <gg>  
#12     0     1     5     4 <tibble [1 × 7]> <gg>  
#13     0     1     5     6 <tibble [1 × 7]> <gg>  
#14     0     1     5     8 <tibble [1 × 7]> <gg>