传递缺失的准引用参数

时间:2019-03-04 14:39:00

标签: r rlang quasiquotes

我正在尝试使用四引号将原始变量名传递给函数,然后将其传递给另一个函数。但是,该参数是可选的,因此我需要测试是否没有给第一个函数提供该参数并将该缺失的参数传递给第二个函数。

在这些示例中,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。

1 个答案:

答案 0 :(得分:1)

我们可以在!!进行enexprfoo2

foo2 <- function(a) {
  print(is_missing(enexpr(a)))
  bar(!!maybe_missing(enexpr(a)))
}

foo2()
#[1] TRUE
#[1] TRUE

foo2(b)
#[1] FALSE
#[1] FALSE