我正在尝试根据函数的参数中的 quosures 制作“新表达式”,但不确定如何准确制作这个新表达式。
这是一个示例,其中我传递了一个分子和分母,理想情况下会在两者上进行突变,但也希望在将它们分开的地方进行突变:
df <- tibble(
g1 = c(1, 1, 2, 2, 2),
g2 = c(1, 2, 1, 2, 1),
a = sample(5),
b = sample(5)
)
my_divide <- function(df, numerator, denominator) {
numerator <- enquo(numerator)
denominator <- enquo(denominator)
df %>%
mutate(p = !!numerator / !!denominator)
}
my_divide(df, g1 , g2)
这失败并出现以下错误:
Error in !denominator : invalid argument type
我可以轻松地将表达式作为它自己的参数传递并 enquo() 它,但这不适用于更多表达式。我还可以从基本 quosures 在数据框中创建临时列,然后直接计算表达式,但这似乎太冗长了。我想有一种更简单的方法可以做到这一点