5

下面我编写了一个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()

4

1 回答 1

3

在 foobar 中使用 ...:

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

  data <- snafu(data, ...)

  data %>% mutate(foo_var = snafu_var + 1)
}
于 2018-08-28T23:42:32.917 回答