r-传递缺失的quaSiquotation参数



我正在尝试使用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

我们可以在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

相关内容

  • 没有找到相关文章

最新更新