Re: [Rd] Creating an environment with attributes in a package

From: John Chambers <jmc_at_r-project.org>
Date: Fri, 16 Jul 2010 09:47:26 -0700

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 work:

 > 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
>

______________________________________________
R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Fri 16 Jul 2010 - 16:53:44 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Sat 17 Jul 2010 - 01:40:17 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive