Передача аргументов в кавычках внутри вложенных функций
Ниже я написал простую функцию snafu()
который вычисляет новую переменную snafu_var
,
library(dplyr)
df <- mtcars %>% select(am, cyl) %>% slice(1:5)
snafu <- function(data, var1, var2){
require(dplyr)
var1 <- enquo(var1)
var2 <- enquo(var2)
data %>% mutate(snafu_var = !!var1 + !!var2)
}
snafu(df, var1 = am, var2 = cyl)
Теперь я хочу, чтобы гнездо snafu()
в другой функции foobar()
который будет использовать переменную, созданную snafu()
,
foobar <- function(data, var1, var2) {
require(dplyr)
data <- snafu(data, var1, var2)
data %>% mutate(foo_var = snafu_var + 1)
}
foobar(df, var1 = am, var2 = cyl)
Я борюсь по двум пунктам (вероятно, связанным):
1) Вложенная функция внутри foobar()
не могу получить доступ к аргументам, предоставленным foobar()
, что приводит к сообщению об ошибке:
Error in mutate_impl(.data, dots) :
Evaluation error: object 'am' not found.
2) Как только я получу вложенную функцию, как я могу вызвать ее вывод, snafu_var
в функции foobar()
?
Это просто представление более сложной вложенной функции, но для решения моей проблемы важно, чтобы функции были вложенными, а переменная, созданная вложенной функцией, snafu()
быть использованным родительской функцией, foobar()
,
1 ответ
Решение
Используйте... в foobar:
foobar <- function(data, ...) {
data <- snafu(data, ...)
data %>% mutate(foo_var = snafu_var + 1)
}