【问题标题】:Quosures in R, how to use the !! operator (tidy-evaluation)R中的Quosures,如何使用!!操作员(整洁评估)
【发布时间】:2019-02-13 13:53:44
【问题描述】:

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

【问题讨论】:

    标签: r dplyr tidyeval


    【解决方案1】:

    !! 是一个非引用运算符,仅在 引用上下文 中有效,即在 dplyr 动词的参数中。您在!!quo(foo) 中看到的错误消息是当前 CRAN 版本中的一个错误。有了开发版,现在是:

    Error: Quosures can only be unquoted within a quasiquotation context.
    
      # Bad:
      list(!!myquosure)
    
      # Good:
      dplyr::mutate(data, !!myquosure)
    

    最后,请注意enquo() 只能用于引用函数参数。由于与 R 编译器有关的技术原因,它仍然适用于其他对象,但不会达到您的预期。您应该只在函数中使用它,并且只能与该函数的参数名称一起使用。

    【讨论】:

      猜你喜欢
      • 2019-09-17
      • 2020-04-28
      • 2021-01-08
      • 2018-06-10
      • 2021-02-25
      • 2020-11-29
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多