自定义函数:如何使用 sym() 和 !! 引用另一列(砰砰)在 dplyr 0.8.0 中不使用 funs()?

Custom functions: How to refer to another column using sym() and !! (bang bang) without using funs() in dplyr 0.8.0?

dplyr 0.8.0 中,包装器 funs()(在 mutate_at()summarise_at() 中使用)已软弃用。

新的推荐语法是使用 ~sum(.) 而不是 funs(sum(.)),这是我以前使用的 "old style"。我的目标是将旧语法转换为新语法,但是当 funs() 中的函数调用使用 (!!sym()) 将字符输入 转换为列时,我遇到了问题name 为函数内可识别的符号。

这是我如何用旧 dplyr 风格编写函数的虚构示例。

var是引用列名的字符串,在funs()处乘以Sepal.Length

multiply_by <- function(var){
  iris %>%
    mutate_at("Sepal.Length",funs(.*!!sym(var)))
}
multiply_by("Sepal.Width") # This works

我的问题是我不知道如何在不遇到错误的情况下将其转换为新的 ~ 语法。如果我 运行 以下它会触发 'invalid argument type' 错误:

multiply_by2 <- function(var){
  iris %>%
    mutate_at("Sepal.Length",~.*!!sym(var))
}
multiply_by2("Sepal.Width")
# Error in !sym(var) : invalid argument type 

有人可以帮忙吗?目前我可以使用 funs(),但由于它被软弃用,我想将我的代码迁移到稳定格式 if/when,它变得完全硬弃用。谢谢!

issues 中提到的一个选项是使用 .data

multiply_by2 <- function(var){
 iris %>% 
       mutate_at("Sepal.Length", list( ~ .* .data[[var]]))

}

multiply_by2("Sepal.Width")