Jeff Horner wrote:
Martin Becker wrote:
Dear developers,

is it possible to create environments in C code of packages?
Simply using
 SEXP env;
 PROTECT (env  = allocSExp(ENVSXP));
and assigning the enclosing environment with SET_ENCLOS seems to be insufficient.

Best wishes,

Here's a function I use in rapache to create one:

static SEXP NewEnv(SEXP enclos){
    SEXP env;
    PROTECT(env = allocSExp(ENVSXP));

    SET_FRAME(env, R_NilValue);
    SET_ENCLOS(env, (enclos)? enclos: R_GlobalEnv);
    SET_HASHTAB(env, R_NilValue);
    SET_ATTRIB(env, R_NilValue);

    UNPROTECT(1);

    return env;
}

Oops! I forgot the definition of my simple function NewInteger:

static SEXP NewInteger(int i){
    SEXP val;
    PROTECT(val = NEW_INTEGER(1));
    INTEGER_DATA(val)[0] = i;
    UNPROTECT(1);
    return val;
}



and an example that creates a new environment and then assigns a variable named OK an integer vector length 1 with value 0:

SEXP env = NewEnv(R_GlobalEnv);
defineVar(install("OK"),NewInteger(0),env);

Best

Jeff

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to