【问题标题】:Using substitute in multiple function calls在多个函数调用中使用替代
【发布时间】:2021-04-16 03:21:41
【问题描述】:
foo <- function(arg) {
  substitute(arg)
}

foo1 <- function(parm) {
  foo(param)
}
foo1(2 + 2)

输出是:

param

如何在foo 中使用替换,这样输出将是表达式2 + 2

【问题讨论】:

    标签: r metaprogramming non-standard-evaluation


    【解决方案1】:

    这是 rlang 方法:

    foo <- function(...) {
      x <- rlang::enexprs(...)
      x[[1]]
    }
    foo(2 + 2)
    

    结果是:

    2 + 2
    

    【讨论】:

    • foo1 的输入可以是任何表达式,不限于字符串。它也不应该评估。所以不希望输出 4。
    • 你完全没有抓住重点。您的回答根本没有解决非标准评估。
    【解决方案2】:
    foo1 <- function(parm) {
      p <- substitute(parm)
      do.call(foo, list(p))
    }
    foo1(2 + 2)
    #2 + 2
    

    【讨论】:

    • 我知道该解决方案。但是,有没有办法在foo1 中不使用substitute
    • @code_life 不容易。我们可以对调用堆栈做出任何假设吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    相关资源
    最近更新 更多