[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