R中的度量值,如何使用!运算符(整洁评估)

时间:2019-02-13 13:53:44

标签: r dplyr tidyeval

我试图理解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之外工作。为什么它不起作用,我该如何解决?

1 个答案:

答案 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编译器有关的技术原因,它仍然可以在其他对象上运行,但不会执行您期望的操作。您只能在函数内使用它,并且只能与该函数的参数名称一起使用。