我想编写一个有两个输入的函数:一个新变量的名称和一个数学表达式。两个参数都以字符串形式出现。
此函数应采用 data.frame 并添加指定的新变量,该变量应为给定数学表达式的结果。
这是我尝试过的最小工作示例:
df <- tibble(A = 1:10, B = 1:10)
new_var <- "C"
expression <- "A + B"
example_fun <- function(new_var, expression) {
new_var_sym <- sym(new_var)
expression_sym <- sym(expression)
mutate(df, !! new_var_sym := !! expression_sym)
}
example_fun(new_var, expression)
这会产生以下错误:
Error in mutate_impl(.data, dots) : Binding not found: A + B.
当我将 mutate 行包装在函数中时expr()
,我得到
mutate(df, `:=`(C, `A + B`))
似乎周围的蜱虫A + B
不应该在那里,但我不知道如何摆脱它们。至少,enquo()
并quo_name()
没有帮助。