[Rd] Creating an environment with attributes in a package

John Chambers jmc at r-project.org
Fri Jul 16 18:47:26 CEST 2010

Note that S4 classes extend "environment" and other reference types, by 
using a hidden slot.  You can then add other slots.  So, with some extra 

 > setClass("myEnv", contains = "environment",
+ representation(myName = "character"))
[1] "myEnv"
 > Foo <- new("myEnv", myName = "Foo")
 > Foo
An object of class "myEnv"
<environment: 0x101a3a580>
Slot "myName":
[1] "Foo"

There are a few holes in the implementation as of R 2.11.1, which are 
being filled in r-devel.  Partly to support some new applications for 
extensions of environments, which I hope to commit today (stay tuned to 
this list).

On 7/16/10 5:51 AM, Jon Clayden wrote:
> 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
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

More information about the R-devel mailing list