我正在尝试使用四引号将原始变量名传递给函数,然后将其传递给另一个函数。但是,该参数是可选的,因此我需要测试是否没有给第一个函数提供该参数并将该缺失的参数传递给第二个函数。
在这些示例中,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。
答案 0 :(得分:1)
我们可以在!!
进行enexpr
和foo2
foo2 <- function(a) {
print(is_missing(enexpr(a)))
bar(!!maybe_missing(enexpr(a)))
}
foo2()
#[1] TRUE
#[1] TRUE
foo2(b)
#[1] FALSE
#[1] FALSE