2012-05-02 27 views
6

Ortamlar için Rcpp'de R ile aynı işlevi with() mümkün olup olmadığına bakıyorum. , Bir ortam oluşturmak iki değişken ekleyebilir ve sadece variablenames kullanarak bir ifade değerlendirmek için with() kullanabilirsiniz RI Örneğin Ortamlarda ifadeleri değerlendirin Rcpp

:

e <- new.env() 
e$x <- 1 
e$y <- 2 

with(e, 
    x + y 
    ) 

Ben Rcpp benzer bir şey yapabileceğini, ancak endekslenmesini gerektirir çevre:

f <- cxxfunction(signature(env="environment"), ' 
Environment e(env); 
double Res = (double)e["x"] + (double)e["y"]; 
return(wrap(Res)); 

', plugin = "Rcpp") 

f(e) 

Yalnızca bir ifadeyi Rcpp'deki değişken adlarını kullanarak değerlendirmek mümkün mü? Sormamın nedeni, ifadeleri ekleyebileceğiniz dinamik bir C++ işlevi yazmak istiyorum. Bazı kukla kodla Örneğin bu işe yaramazsa:

f <- cxxfunction(signature(env="environment"), sprintf(' 
Environment e(env); 
double Res; 
// Res = with(e, %s); 
return(wrap(Res)); 
','x + y'), plugin = "Rcpp") 

cevap

2

Sana sanmıyorum: derleme zamanında de, senin değişkenler bilinmemektedir. R'nin yaptığı dinamik aramalara başvurmak zorundasınız. Özünde, x + y ifadeniz için bir çözümleyici oluşturmanız gerekir.