在嵌套函数中传递准引号参数
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)
}
下面我写了一个简单的函数 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)
}