函数调用中的非标准评估+运算符重载

时间:2016-01-27 06:39:37

标签: r

我最近对R中的Hadley Wickhams Non-standard Evaluation例子感到着迷,但我不确定我想做什么是可能的。

我希望有一个基于闭包的环境,您可以在其中传递得到评估的表达式(以NSE方式),类似于子集的工作方式。但问题是,为了做到这一点,我认为我需要从根本上改变参数的传递方式。

例如,

g <- function(setup_stuff){
  function(x) {
    substitute(x)
  }
}
如果我这样的话,

会给我分配给x的表达式:

test <- g("Setup stuff")
test(1:10)
# 1:10

同样,我可以做类似的事情:

g <- function(setup_stuff){
  function(x) {
    sys.call(x)
  }
}

这通常会给我一些我正在寻找的东西 - 一个完全没有评估的参数列表:

test <- g("setup variables")
test(1:10)
# test(1:10)

但这一切都依赖于我将变量传递给&#34;标准&#34;通过用逗号分隔指定的参数。我希望有类似的东西:

g <- function(setup_stuff){
      function(...) {
        # Capture named expression(s) before evaluation 
        substitute(...) 
      }
    }

这样,例如,我可以根据它们的名称和传入的运算符来评估a中的参数,例如我一直试图重载逻辑运算符&amp;,但我之前收到错误执行NSE的功能甚至被称为:

test <- g("Setup stuff")
test(a=1 & b=2)
# > test(a=1 & b=2)
# Error: unexpected '=' in "test(a=1 & b="

我知道我可以可能通过重载&#39;&amp;&#39;来实现这一目标。并且&#39; =&#39;某个特定类的运算符,只返回未评估的调用,但是a和b需要是该类的对象,但我想知道我是否遗漏了某人可以轻易看到的内容?

0 个答案:

没有答案