将变量传递给使用`enquo()`的函数

时间:2018-10-16 23:30:10

标签: r dplyr tidyeval quasiquotes

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

请考虑以下内容,它具有一个较低级别的功能(使用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)
}

1 个答案:

答案 0 :(得分:2)

唯一可行的方法是采用...并将其转发给较低的功能。命名参数必须在每一步都加引号和不加引号。