On Sun, 22 Oct 2006, Deepayan Sarkar wrote: > On 10/22/06, Duncan Murdoch <[EMAIL PROTECTED]> 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.
mkString("pkg") is simpler than ScalarString(mkChar("pkg")). -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel