我最近对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需要是该类的对象,但我想知道我是否遗漏了某人可以轻易看到的内容?