如何在R函数体中用它们的值替换符号

Coo*_*ter 0 r function

此代码显示在调用之前f尚未查找q.

q <- 2
f <- function(x) q + x
f
Run Code Online (Sandbox Code Playgroud)

我想告诉R身体中哪些符号立即查找(在这种情况下list("q"))并相应地进行修改f.怎么做到呢?

Cla*_*ley 5

在Common Lisp中,这看起来像:

CL-USER> (defparameter q 4)
Q
CL-USER> (let ((bar q))
            (defmacro f (x)
               `(+ ,bar ,x)))
F
CL-USER> (macroexpand-1 `(f 4))
(+ 4 4)
T
Run Code Online (Sandbox Code Playgroud)

在R中,这可能看起来像:

> q = 2
> f = eval(bquote(function(x) .(q) + x))
> f
function (x) 
2 + x
> 
Run Code Online (Sandbox Code Playgroud)

由于R被解释,eval与那里的球场相同.使用Common Lisp,如果你不想使用eval,你可以使用一个编译时宏,它带有一个硬编码的'q值',这样每次在代码中使用它时就可以了是指宏在创建时的q值.