在dplyr 0.8.0
中,包装器funs()
(在mutate_at()
或summarise_at()
中使用)已被弃用。
新推荐的语法是使用~sum(.)
而不是funs(sum(.))
,这是我以前使用的“旧样式”。我的目标是将旧语法转换为新语法,但是当funs()
中的函数调用使用(!!sym()
)来转换字符输入为列名<时,我一直遇到问题。 / strong>设置为可以在函数中识别的符号。
这是我如何以旧的dplyr
样式编写函数的虚构示例。
var
是引用列名的字符串,在funs()
处乘以Sepal.Length
。
multiply_by <- function(var){
iris %>%
mutate_at("Sepal.Length",funs(.*!!sym(var)))
}
multiply_by("Sepal.Width") # This works
我的问题是,我在不遇到错误的情况下无法弄清楚如何将其转换为新的~
语法。如果我运行以下命令,则会触发“无效参数类型”错误:
multiply_by2 <- function(var){
iris %>%
mutate_at("Sepal.Length",~.*!!sym(var))
}
multiply_by2("Sepal.Width")
# Error in !sym(var) : invalid argument type
有人可以帮忙吗?目前,我可以使用funs()
,但是由于它已被软弃用,因此如果/完全被弃用,我想将代码迁移为稳定的格式。谢谢!
答案 0 :(得分:1)
issues中提到的一种选择是使用.data
multiply_by2 <- function(var){
iris %>%
mutate_at("Sepal.Length", list( ~ .* .data[[var]]))
}
multiply_by2("Sepal.Width")