[Rd] Getting hold of a package's environment from C code

Deepayan Sarkar deepayan.sarkar at gmail.com
Sun Oct 22 23:24:51 CEST 2006


On 10/22/06, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> On 10/22/2006 3:56 PM, Deepayan Sarkar wrote:
> > Hi,
> >
> > I have a package where I'm calling an R function (say "foo") from C
> > code. "foo" is in the same package, but is not exported. I construct
> > the call using lang1(install("foo")), but to eval it I need the
> > package's environment.  Is there a way to do this? Passing the correct
> > environment through .Call() is not an option.
> >
> > Right now, I'm getting the environment first using something like
> >
> >   rho = PROTECT(eval(lang2(install("environment"), install("bar")),
> > R_GlobalEnv))
> >
> > where bar _is_ exported. However, this doesn't work if the package is
> > loaded but not attached, and is also risky because someone might
> > define another "bar" that is found first.
>
> In R code, you could use getNamespace("pkg") to get the namespace
> environment.  I haven't tried this, but I'd assume
>
> PROTECT(rho = eval(lang2(install("getNamespace"),
>                           ScalarString(mkChar("pkg"))));
>
> (or something like it) would be the C equivalent.

Thanks, that works perfectly.

-Deepayan




More information about the R-devel mailing list