我想在 C/C++ 中复制以下 R 函数:
fn1 = function(a, b) eval(a, b)
fn1(substitute(a*2), list(a = 1))
#[1] 2
我的前几次尝试导致错误(有时会导致崩溃),可能是因为我没有从列表对象中获取环境(我查看了 R 源代码,它使用了一堆内部函数)我认为我不能使用的点),我认为这是Rf_eval
想要的,而不是对象本身。
require(Rcpp)
require(inline)
fn2 = cxxfunction(signature(x = "SEXP", y = "SEXP"),
'return Rf_eval(x, y);')
fn2(substitute(a*2), list(a = 1))
# error, object 'a' not found
另一种尝试是尝试调用 base R eval
,这也给出了相同的错误:
require(Rcpp)
require(inline)
fn3 = cxxfunction(signature(x = "SEXP", y = "SEXP"),
'Function base_eval("eval"); return base_eval(x, y);',
plugin = 'Rcpp')
fn3(substitute(a*2), list(a = 1))
# again, object 'a' not found
每种方法都缺少什么,我怎样才能使它们都起作用?