[Rd] How to understand packages, namespaces, environments
Duncan Murdoch
murdoch at stats.uwo.ca
Mon May 9 07:56:11 CEST 2005
Prof Brian Ripley wrote:
> 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).
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).
>
More information about the R-devel
mailing list