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).
Wrong, not misquoted. Sorry about that. Thanks for the correct description.
Duncan Murdoch
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).
______________________________________________ R-devel@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-devel