On Mon, 9 May 2005 [EMAIL PROTECTED] 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,                  [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@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to