我正在研究是否可以在环境中具有与Rcpp中R中的with()
相同的功能。
例如,在R中,我可以创建一个环境,添加两个变量,并使用with()
仅使用变量名来评估表达式:
e <- new.env()
e$x <- 1
e$y <- 2
with(e,
x + y
)
我可以在Rcpp中做类似的事情,但是它需要对环境建立索引:
f <- cxxfunction(signature(env="environment"), '
Environment e(env);
double Res = (double)e["x"] + (double)e["y"];
return(wrap( Res ));
', plugin = "Rcpp" )
f(e)
是否可以仅使用Rcpp中的变量名来评估表达式?我问的原因是因为我想编写一种动态C++函数,您可以在其中添加表达式。例如,使用一些无效的伪代码:
f <- cxxfunction(signature(env="environment"), sprintf('
Environment e(env);
double Res;
// Res = with(e, %s );
return(wrap( Res ));
','x + y'), plugin = "Rcpp" )
最佳答案
我认为您不能:在编译时,您的变量是未知的。您必须诉诸于动态查找,这是R所做的。本质上,您需要为x + y
表达式重新创建一个解析器。
关于r - 在Rcpp中评估环境中的表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10409822/