传递缺失的准引用参数

Passing on missing quasiquotation arguments

我正在尝试使用准引号将原始变量名传递给一个函数,然后再将它传递给另一个函数。但是,参数是可选的,所以我需要测试第一个函数是否没有给出参数并将缺少的参数传递给第二个函数。

在这些示例中,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 是否被传递了参数?

运行 R 3.5.1 with 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