[Rd] Creating an environment with attributes in a package

Jon Clayden jon.clayden at gmail.com
Fri Jul 16 14:51:39 CEST 2010


On 16 July 2010 13:32, Hadley Wickham <hadley at rice.edu> wrote:
> On Fri, Jul 16, 2010 at 2:08 PM, Jon Clayden <jon.clayden at gmail.com> wrote:
>> Dear all,
>>
>> I am trying to create an environment object with additional attributes, viz.
>>
>> Foo <- structure(new.env(), name="Foo")
>>
>> Doing this in a standard session works fine: I get the environment
>> with attr(,"name") set as expected. But if the same code appears
>> inside a package source file, I get just the plain environment with no
>> attributes set. Using a non-environment object works as I would expect
>> within the package (i.e. the attributes remain).
>>
>> I've looked through the documentation for reasons for this, and the
>> only thing I've found is the mention in the language definition that
>> "assigning attributes to an environment can lead to surprises". I'm
>> not sure if this is one of the surprises that the author(s) had in
>> mind! Could someone tell me whether this is expected, please?
>
> You'll be much less surprised if you do:
>
> Foo <- structure(list(new.env()), name="Foo")
>
> Attributes on reference objects are also passed by reference, and
> surprises will result.

Ah, it's good to know the core reason for the "surprises"! Sounds like
the best thing is to refactor things as you suggest.

Many thanks for all the responses.

Regards,
Jon



More information about the R-devel mailing list