在嵌套函数中传递准引号参数

Passing quasiquoted arguments within nested functions

下面我写了一个简单的函数 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) 一旦嵌套函数开始工作,我如何在函数 foobar()?

中调用它的输出 snafu_var

这只是一个更复杂的嵌套函数的代表,但解决我的问题的关键是函数是嵌套的,并且由嵌套函数创建的变量 snafu() 由父函数使用, foobar().

在 foobar 中使用...:

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

  data <- snafu(data, ...)

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