R中的Quosures,如何使用!!操作员(整洁评估)
Quosures in R, how to use the !! operator (tidy-evaluation)
我想了解 R 中的 tidy 求值。
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
之外工作。为什么它不起作用,我该如何解决?
!!
是只在 引用上下文 中有效的非引用运算符,即在 dplyr 动词的参数中。您在 !!quo(foo)
中看到的错误消息是当前 CRAN 版本中的错误。有了开发版,现在是:
Error: Quosures can only be unquoted within a quasiquotation context.
# Bad:
list(!!myquosure)
# Good:
dplyr::mutate(data, !!myquosure)
最后,请注意 enquo()
应该只用于引用函数参数。由于与 R 编译器有关的技术原因,它仍然适用于其他对象,但不会按照您的预期进行。您应该只在函数中使用它,并且只能使用该函数的参数名称。
我想了解 R 中的 tidy 求值。
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
之外工作。为什么它不起作用,我该如何解决?
!!
是只在 引用上下文 中有效的非引用运算符,即在 dplyr 动词的参数中。您在 !!quo(foo)
中看到的错误消息是当前 CRAN 版本中的错误。有了开发版,现在是:
Error: Quosures can only be unquoted within a quasiquotation context.
# Bad:
list(!!myquosure)
# Good:
dplyr::mutate(data, !!myquosure)
最后,请注意 enquo()
应该只用于引用函数参数。由于与 R 编译器有关的技术原因,它仍然适用于其他对象,但不会按照您的预期进行。您应该只在函数中使用它,并且只能使用该函数的参数名称。