在函数中使用准引用并在 dplyr 中进行总结

using quasiquotation in a function with summarize in dplyr

我正在尝试编写一个函数,该函数可以将列名作为分配给变量的字符串,并像这样为它们生成汇总输出

my_function <- function(my_df, columnA,columnB){
    

    summ_df <- my_df %>% 
        group_by(cyl) %>% 
        summarise(base_mean = mean(columnA),
                  contrast_mean = mean(columnB)) 
    
    return(summ_df)
    }


    base = "drat"
    cont = "wt"
    my_function(mtcars,base,cont)

我想要的是上述函数 return 与

相同
mtcars %>% 
    group_by(cyl) %>% 
    summarise(base_mean = mean(drat),
              contrast_mean = mean(wt)) 

我确定它是 enexpr 或 ensym 的某种组合,并且 !!但我不断得到 NA 值

ensym!! 结合使用,这样它就可以接受未引用和引用的实际参数

my_function <- function(my_df, columnA,columnB){
    

    my_df %>% 
        group_by(cyl) %>% 
        summarise(base_mean = mean(!! ensym(columnA)),
                  contrast_mean = mean(!! ensym(columnB)), .groups = 'drop' )
    
   
    }

-测试

> my_function(mtcars, !!base, !!cont)
# A tibble: 3 × 3
    cyl base_mean contrast_mean
  <dbl>     <dbl>         <dbl>
1     4      4.07          2.29
2     6      3.59          3.12
3     8      3.23          4.00