【发布时间】:2019-08-14 19:34:34
【问题描述】:
使用rlang,我希望有一个函数既可以在直接调用时也可以在默认情况下作为构造另一个函数参数的一部分传递参数时工作,例如:
refdf = data.frame(x=1:100, y=runif(100,-1,1))
test.helper <- function(z, df) {
qz <- enquo(z)
range(eval_tidy(qz, df))
}
test.helper(y, refdf) # works
test.main <- function(z, df, def = test.helper(z, df)) {
print(def)
}
test.main(y, refdf)
# doesn't work: Error in eval_tidy(qz, df) : object 'y' not found
如果相反,我会这样做
refdf = data.frame(x=1:100, y=runif(100,-1,1))
test.helper <- function(z, df) {
qz <- as_quosure(z)
range(eval_tidy(qz, df))
}
test.helper(y, refdf)
# doesn't work: Error in is_quosure(x) : object 'y' not found
test.main <- function(z, df, def = test.helper(enquo(z), df)) {
print(def)
}
test.main(y, refdf)
# now works
我觉得我错过了什么时候被引用的东西;我可以使用另一种语法来使两者都起作用吗?我知道我可以定义一个单独的test.helper_quo 或类似的东西,但我真的很想在签名中使用test.helper(作为对用户可用功能的额外提示)。
【问题讨论】: