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<had...@rice.edu>  wrote:
On Fri, Jul 16, 2010 at 2:08 PM, Jon Clayden<jon.clay...@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@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to