2012-05-02 43 views
6

我正在研究是否可以在Rcpp for R中爲環境具有與with()相同的功能。評估Rcpp環境中的表達式

例如,RI可以創建一個環境,增加兩個變量,並使用with()僅使用variablenames計算表達式:

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") 

回答

2

我不認爲你可以:在編譯時,你的變量是未知的。你不得不求助於R所做的動態查找。實質上,您需要爲您的x + y表達式重新創建解析器。