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

Deepayan Sarkar deepayan.sarkar at gmail.com
Mon Oct 23 22:10:57 CEST 2006


On 10/23/06, Luke Tierney <luke at stat.uiowa.edu> wrote:
> On Mon, 23 Oct 2006, Prof Brian Ripley wrote:
>
> > As far as I can tell from the original post, Deepayan asked for a way
> > to find a package's namespace environment (rather than the package
> > environment, <namespace:foo> not <package:foo>), so the subject line is
> > subject to misinterpretation.
> >
> > On Mon, 23 Oct 2006, Prof Brian Ripley wrote:
> >
> >> On Sun, 22 Oct 2006, Seth Falcon wrote:
> >>
> >>> Seth Falcon <sfalcon at fhcrc.org> writes:
> >>>> Perhaps:
> >>>>
> >>>> R_FindNamespace(mkString(where))
> >>>
> >>> Sorry, this won't help you for package-level code as this function is
> >>> part of the internal use only API.  It would be nice to have access to
> >>> it or a similar function from C in package code.
> >>
> >> Hmm, it is declared in Rinternals.h, which is the public header for
> >> manipulating R objects at C level.  As such it is available to packages, but
> >> as it is not documented in 'Writing R Extensions' it is subject to change.
> >>
> >> R_FindNamespace is essentially the same code as Duncan M provided, so it is a
> >> pretty simple function.  (It still contains a test that namespaces are
> >> supported, and that seems long overdue for removal.)
> >
> > I think Deepayan's original enquiry was about getting hold of a namespace
> > environment from within an already loaded namespace.  That can be done
> > entirely at C level, as we don't have the complication of possibly loading
> > the namespace.  Just
> >
> >     val = findVarInFrame(R_NamespaceRegistry, install("pkgname"));
> >
> > does that job, with val == R_UnboundValue should the namespace not be
> > loaded.  AFAICS, everything here is available to a package writer, and
> > this is equally undocumented.
>
> This level of detail should remain undocumented as it might be useful
> to change the representation at some point. R_FindNamespace is a safer
> bet, and we probably should document it as officially available..

OK, so I'm now using

   rho = PROTECT(R_FindNamespace(mkString("mypkg"))),

Thanks,
Deepayan




More information about the R-devel mailing list