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. > > One solution that might work is to make 'rho' a global variable and > assign the correct value when the package is loaded. Is that a good > idea? How should I PROTECT it? I'd say to avoid globals if you can, and I think you can here. Duncan Murdoch ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel