首页 > 解决方案 > 如何将函数参数粘合到 dplyr 的跨函数中的 .names?

问题描述

我正在尝试across使用{col}中的函数参数和其中一个函数参数来命名函数的输出

library(tidyverse)

mean_by <- function(data, by, var, prefix = "avg") {
  data %>% 
    group_by({{ by }}) %>% 
    summarise(across({{ var }}, mean, .names = "{prefix}_{col}"))
}

但是,在 上进行测试时iris %>% mean_by(Species, Sepal.Width),我收到找不到对象“前缀”的错误。中的胶水语法.names对我来说看起来不错,所以我认为这是一个范围问题?参数只能.names访问已传递给的内容across吗?

标签: rtidyversetidyeval

解决方案


我相信只允许引用和inside .names,但你可以尝试粘贴你的:across{col}{fn}acrossprefix

> library(tidyverse)
> mean_by <- function(data, by, var, prefix = "avg") {
  data %>% 
    group_by({{ by }}) %>% 
    summarise(across({{ var }}, mean, .names = paste0(prefix,"_{col}")))
 }
> iris %>% mean_by(Species, Sepal.Width)
`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 3 x 2
  Species    avg_Sepal.Width
  <fct>                <dbl>
1 setosa                3.43
2 versicolor            2.77
3 virginica             2.97


推荐阅读