[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