Ниже я написал простую функцию 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()
.