[Rd] S4 Inheritance of environments

Christopher Brown cbrown at opendatagroup.com
Sat Apr 24 19:15:15 CEST 2010


I looked through the documentation and the mailing lists and could not
find an answer to this.  My apologies if it has already been answered.
 If it has, a pointer to the relevant discussion would be greatly
appreciated.

Creating S4 classes containing environments exhibits unexpected
behavior/features.  These have a different in two ways:

1) slotName for the data: ".xData" instead of ".Data" and do not respond to the
2) Response to the is.* function seems to indicate that the object
does not know of its inheritance.  ( Notably, the inherits function
works as expected. )

Here is a working illustration:

> #  LIST
> setClass( 'inheritList', contains='list')
[1] "inheritList"
> inList <- new( 'inheritList' )
> class( inList )
[1] "inheritList"
attr(,"package")
[1] ".GlobalEnv"
> is.list( inList )          # TRUE
[1] TRUE
> slotNames(inList)          # ".Data"
[1] ".Data"
> inherits(inList, 'list' )  # TRUE
[1] TRUE
>
>
> # ENVIRONMENT
> setClass( 'inheritEnv', contains='environment' )
Defining type "environment" as a superclass via class ".environment"
[1] "inheritEnv"
> inEnv <- new( 'inheritEnv' )
> class(inEnv)
[1] "inheritEnv"
attr(,"package")
[1] ".GlobalEnv"
> is.environment(inEnv)             # FALSE
[1] FALSE
> slotNames(inEnv)                  # ".xData"
[1] ".xData"
> inherits(inEnv, 'environment' )   # TRUE
[1] TRUE

My questions is whether this behavior is a bug? By design?  A work
around?  Etc.?

Thanks kindly for your reply,

Chris


the Open Data Group
 http://www.opendatagroup.com
 http://blog.opendatagroup.com



More information about the R-devel mailing list