Передача аргументов в кавычках внутри вложенных функций - PullRequest
0 голосов
/ 29 августа 2018

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

0 голосов
/ 29 августа 2018

Использовать ... в foobar:

foobar <- function(data, ...) {

  data <- snafu(data, ...)

  data %>% mutate(foo_var = snafu_var + 1)
}
...