2012-02-09 26 views
6

No pude encontrar documentación para esto. Parece que el código fuente R usa NewEnvironment y R_NewHashedEnv, pero ninguno de ellos está en los encabezados públicos, por lo que parece que no están disponibles para mí como usuario. ¿Qué función (o qué líneas de código) debo usar para generar un nuevo ENVSXP?¿Cómo se puede crear un nuevo entorno R desde C?

+0

Si permite que para C++, yo puedo mostrar cómo hacerlo a través de RCPP. –

Respuesta

3

¿Quieres allocSExp:

/* C code in foo.c */ 
#include "Rinternals.h" 
SEXP foo() { 
    SEXP res = allocSExp(ENVSXP); 
    return res; 
} 

> # R code (after running R CMD SHLIB foo.c) 
> dyn.load("foo.dll") 
> .Call("foo") 
<environment: 0x016a4084> 
+1

¿Por qué no un forro de uno o dos usando [en línea] (http://cran.r-project.org/package=inline)? Además, asigna, ¿no necesita PROTEGER/DESPROTECTAR? –

+0

@DirkEddelbuettel: es triste decirlo, no uso en línea habitualmente (F- para mí). No llamo a ninguna macro después de la asignación en este ejemplo simple, por lo que no hay posibilidad de otra asignación (y GC potencial) antes de que mi función finalice. Debería haber sido más explícito sobre eso. –

+0

Claramente, es un caso en el que intento demasiado. Ahí estaba buscando algún tipo de función allocEnv, cuando la asignación más básica de SEXP era todo lo que necesitaba. [Y sí, agregué las macros de Yelly apropiadas]. Obtiene puntos de bonificación si puede dirigirme a la documentación que describe el uso de funciones como allocSExp ... –

Cuestiones relacionadas