评估Rcpp环境中的表达式

时间:2012-05-02 07:58:53

标签: r rcpp

我正在考虑是否可以在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" )

1 个答案:

答案 0 :(得分:2)

我认为你不能:在编译时,你的变量是未知的。你必须采用R所做的动态查找。实质上,您需要为x + y表达式重新创建解析器。