[Rd] How to understand packages, namespaces, environments

Prof Brian Ripley ripley at stats.ox.ac.uk
Mon May 9 06:39:13 CEST 2005


On Mon, 9 May 2005 Mark.Bravington at csiro.au wrote:

> [Alexander Stoddard]
>> Subject: Re: [Rd] How to understand packages, namespaces, environments
>>
>>>
>>> Does saying the following load package 'foo' into its own
>> environment ?
>>> > library(foo)
>>
> [Duncan Murdoch]
>> This loads some of the (name, object) pairs from the package into two
>> environments:  the public one the user can see, and the
>> namespace one that the code in the package can see.  They're
>> related, you don't get two copies of the objects.
>
> That's interesting-- I thought there really were two copies. In my debug
> package, I've taken the approach of changing both copies. Is one of the
> copies a "master", and the other one something like an activeBinding?
> Can I get away with changing just one of them?

Duncan is wrong here (or misquoted).  Loading a package with a namespace 
loads all the objects in the package (possibly as promises) into the 
namespace environment.  Then some are copied (using assign) to the package 
environment.  Since like most R copies this is really copy-on-change you 
do not get a real copy (nor force a promise) until use.

See ?fixInNamespace for explicit statements about this.  There can be more 
than two copies, since importing also `copies', as does S3 method 
registration (the latter does sometimes force promises).

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
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



More information about the R-devel mailing list