[Rd] '"ts" treated as a registered S3 class, but keep its "structure" behaviour' ?

John Chambers jmc at r-project.org
Thu Aug 7 18:11:52 CEST 2008


Yohan Chalabi wrote:
> Dear all,
>
> In R-devel I have noticed the new approach for the "ts" class in the
> package "methods".
>
> the "structure" behaviour of "ts" is not always kept when one uses
> "ts" objects and objects of classes which extend the virtual class
> "structure".
>
> As a short example:
>
> ## this works fine
> setClass("foo", representation(header = "character"), contains = "structure")
> foo <- new("foo", 1:10, header = "foo")
> ts <- ts(1:10)
> foo / ts
>
> ## but the problem appears when one defines an "Ops" method for class "foo"
> setMethod("Ops", c("foo", "foo"),
>            function(e1, e2) {
>                .Data <- callGeneric(e1 at .Data, e2 at .Data)
>                header <- paste(e1 at header, e2 at header, sep = "_")
>                new("foo", .Data, header = header)
>            })
> foo <- new("foo", 1:10, header = "foo")
> foo + foo
> ts <- ts(1:10)
> foo / ts
> # Error in getDataPart(1:10) : no '.Data' slot defined for class "ts"
>
> Is this the expected behavior?
>   
No, not expected.  It may take some special treatement to fix it, though.

Your subject heading is indeed the problem.  Normally, the structure of 
an S3 class is a black box, and no S4 slots should usually be associated 
with it when it's registered via setOldClass.

However, just because "ts" does want to be a "structure" class, it would 
be nice to give it a .Data slot.  I'll experiment with this and see if 
it causes other things to break immediately.

Thanks for the report.

John Chambers
> regards,
> Yohan
>
> --
> PhD student
> Swiss Federal Institute of Technology
> Zurich
>
> www.ethz.ch
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>



More information about the R-devel mailing list