From luke at stat.uiowa.edu  Mon Oct 23 15:18:32 2006
From: luke at stat.uiowa.edu (Luke Tierney)
Date: Mon, 23 Oct 2006 08:18:32 -0500 (CDT)
Subject: [Rd] Getting hold of a package's environment from C code
In-Reply-To: <Pine.LNX.4.64.0610230810330.10964@gannet.stats.ox.ac.uk>
References: <eb555e660610221256g3952a408sc25f06afe8307cb5@mail.gmail.com>
	<453BD456.4050702@stats.uwo.ca>
	<eb555e660610221424kac664fanba7b998b12faaf1e@mail.gmail.com>
	<m2ac3n3ce9.fsf@ziti.fhcrc.org> <m28xj71wqa.fsf@ziti.fhcrc.org>
	<Pine.LNX.4.64.0610230810330.10964@gannet.stats.ox.ac.uk>
Message-ID: <Pine.LNX.4.64.0610230817380.3414@itasca2.wildberry.org>

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.)

Except for a small detail: the code in R_FindNamespace protects the
expression before callign eval -- this is needed since eval does not.

Best,

luke

-- 
Luke Tierney
Chair, Statistics and Actuarial Science
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:      luke at stat.uiowa.edu
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu




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