如果尚未引用,则有条件地引用/替换表达式

时间:2017-04-10 20:35:23

标签: r eval metaprogramming nse non-standard-evaluation

我正在寻找一种方法来引用传递给函数的参数(考虑substitute()ggplot2的{​​{1}},aes()subset()' s data.table行为),但有条件地执行 - 仅在尚未引用[的情况下。

这是因为我想轻松地链接函数,这些函数不会假设参数是否先前被引用 - 而是根据需要替换它。

几个问题:

  1. 为什么这是个坏主意?
  2. 是否已经有任何内置方法来实现这一目标?
  3. quote()部分是因为如果tryCatch promise评估为未定义的变量,is.language会抛出错误。还有其他/更好的解决方案吗?
  4. 我想出了什么:

    x

    工作原理:

    substitute_c <- function(x) {
      e <- suppressWarnings(
        tryCatch({x; FALSE}, 
                 error = function(e) TRUE))
    
      if (e || !is.language(x)) {
        substitute_q(substitute(x), env = parent.frame())
      } else {
        x
      }
    }
    

0 个答案:

没有答案