Передача переменных в функции, которые используют `enquo()`

У меня есть концептуальная проблема. Я хочу передать переменные в функцию, которая превращает некоторые из этих переменных в выражения через enquo (от dplyr / rlang пакеты). Тем не менее, я хочу сделать это с помощью других функций.

Рассмотрим следующее, у которого есть функция более низкого уровня (та, которая использует enquo()) и более высокого уровня, который питается этим. Когда он передает свою переменную q в lower_function (например, пользователь звонит higher_func1(mtcars, cyl==6)), значение new_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 ответ

Решение

Единственный способ, которым это возможно, это принимая ... и переадресация их на нижнюю функцию. Именованные аргументы должны быть указаны и не заключены в кавычки на каждом этапе.

Другие вопросы по тегам