Message-ID: <4AC4DAC8.6010107@vanderbilt.edu>
Date: 2009-10-01T16:37:28Z
From: Jeffrey Horner
Subject: creating environments in package's C code
In-Reply-To: <4AC4D3C5.7090609@vanderbilt.edu>
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 at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel