我正在尝试使用 quasiquotation 将原始变量名称传递给函数,然后将其传递给另一个函数。但是,参数是可选的,所以我需要测试第一个函数是否没有给出参数并将缺少的参数传递给第二个函数。
在这些示例b
中,指的是 data.frame 中的变量。
测试一个函数是否传递了一个原始变量表达式或没有参数,我做
foo <- function(a) {
print(is_missing(enexpr(a)))
}
foo()
# [1] TRUE
foo(b)
# [1] FALSE
如果没有enexpr
,变量b
将尝试被评估 - 并且当丢失时 - 错误。
接下来,我尝试将缺少的参数传递给另一个函数 ( bar
),然后该函数将测试它的存在:
foo2 <- function(a) {
print(is_missing(enexpr(a)))
bar(maybe_missing(a))
}
bar <- function(a) {
print(is_missing(enexpr(a)))
}
foo2()
# [1] TRUE
# [1] FALSE <-- "wrong" (but not unexpected)
foo2(b)
# [1] FALSE
# [1] FALSE
问题:如何bar
测试是否foo2
通过了参数?
使用 rlang 0.3.0.1 运行 R 3.5.1。