运行R 3.5.1
我正在尝试使用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。
我们可以在foo2
中进行!!
和enexpr
foo2 <- function(a) {
print(is_missing(enexpr(a)))
bar(!!maybe_missing(enexpr(a)))
}
foo2()
#[1] TRUE
#[1] TRUE
foo2(b)
#[1] FALSE
#[1] FALSE