我试图理解R中的整洁评估。
grouped_mean <- function(data, group_var, summary_var) {
group_var <- enquo(group_var)
summary_var <- enquo(summary_var)
data %>%
group_by(!!group_var) %>%
summarise(mean = mean(!!summary_var))
}
我了解为什么以及如何使用它,但我猜不到实际发生的事情。
var <- "test"
var <- enquo(var)
!!var
Error in is_quosure(e2) : argument "e2" is missing, with no default
这给了我一个错误,但我希望它也可以在dplyr
之外工作。为什么它不起作用,我该如何解决?
答案 0 :(得分:2)
!!
是一个取消引用的运算符,仅在引用上下文(即dplyr动词的参数)中起作用。您在!!quo(foo)
中看到的错误消息是当前CRAN版本中的错误。对于开发版本,现在为:
Error: Quosures can only be unquoted within a quasiquotation context.
# Bad:
list(!!myquosure)
# Good:
dplyr::mutate(data, !!myquosure)
最后,请注意enquo()
仅应用于引用函数参数。由于与R编译器有关的技术原因,它仍然可以在其他对象上运行,但不会执行您期望的操作。您只能在函数内使用它,并且只能与该函数的参数名称一起使用。