2012-05-02 11 views
6

Sto osservando se è possibile avere la stessa funzionalità di with() in R in Rcpp per ambienti.Valuta espressioni in ambienti in Rcpp

Ad esempio, nel RI potrebbe creare un ambiente, aggiungere due variabili e utilizzare with() per valutare un'espressione utilizzando solo i variablenames:

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

with(e, 
    x + y 
    ) 

avrei potuto fare qualcosa di simile in Rcpp, ma richiede l'indicizzazione dei ambiente:

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

', plugin = "Rcpp") 

f(e) 

È possibile valutare un'espressione utilizzando solo i nomi delle variabili in Rcpp? Il motivo per cui lo chiedo è perché voglio scrivere una sorta di funzione C++ dinamica in cui è possibile aggiungere espressioni. Per esempio con un codice fittizio che non funziona:

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

risposta

2

Non credo che si può: a tempo di compilazione, le variabili sono sconosciuti. Devi fare ricorso a ricerche dinamiche che è ciò che fa R. In sostanza, avresti bisogno di ricreare un parser per la tua espressione x + y.