2012-05-02 15 views
6

Estoy buscando si es posible tener la misma funcionalidad que with() en R en Rcpp para entornos.Evaluar expresiones en entornos en Rcpp

Por ejemplo, en RI podría crear un entorno, añadir dos variables y el uso de with() para evaluar una expresión utilizando sólo los variablenames:

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

with(e, 
    x + y 
    ) 

que podría hacer algo similar en RCPP, pero requiere la indexación de la entorno:

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

', plugin = "Rcpp") 

f(e) 

¿Es posible evaluar una expresión utilizando solo los nombres de las variables en Rcpp? La razón por la que estoy preguntando es porque quiero escribir una especie de función dinámica de C++ donde puedes agregar expresiones. Por ejemplo con un poco de código ficticio eso no funciona:

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

Respuesta

2

No creo que se pueda: en tiempo de compilación , sus variables son desconocidos. Tienes que recurrir a búsquedas dinámicas, que es lo que R hace. En esencia, necesitarías recrear un analizador para tu expresión x + y.