【问题标题】:Passing variables to functions that use `enquo()`将变量传递给使用 `enquo()` 的函数
【发布时间】:2019-03-21 13:38:50
【问题描述】:

我有一个概念问题。我想将变量传递给一个函数,该函数通过enquo(来自dplyr/rlang 包)将其中一些变量转换为quosures。但是,我想通过其他功能来做到这一点。

考虑以下,它具有较低级别的功能(使用enquo() 的功能)和提供给它的较高级别的功能。当它将其变量q 传递给lower_function(例如,用户调用higher_func1(mtcars, cyl==6))时,new_q 的值将是表达式'q'。

如何保留更高级别函数的用户输入,以便 enquo() 接受它们? 我知道有一些变通方法可以更改 lower_function,但我'我对那些不感兴趣。我对使用enquo() 更改功能的解决方案感兴趣。

library(dplyr)
library(rlang)

higher_func1 <- function(df, q) {
  # Need to do something to `q` here
  lower_function(df, q, dplyr::filter)
}

lower_function <- function(df, qq, f) {
  new_q <- rlang::enquos(qq)
  f(df, !!! new_q)
}

【问题讨论】:

    标签: r dplyr tidyeval quasiquotes


    【解决方案1】:

    唯一可行的方法是获取... 并将它们转发到较低的函数。命名参数在每一步都必须加引号和不加引号。

    【讨论】:

    • 如何取消报价?还是我误解了你?
    • 你像这样传递qlower_function(df, !!enquo(q), filter)
    • 啊,太好了,这实际上 确实 解决了它,对吧?这正是我所需要的!
    • 啊抱歉我误解了这个问题,很高兴它成功了!
    猜你喜欢
    • 2021-11-21
    • 2021-11-16
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多