[Rd] s4 methods and base

Prof Brian Ripley ripley at stats.ox.ac.uk
Wed Aug 6 10:02:30 MEST 2003

On Wed, 6 Aug 2003, Marsland, John wrote:

> This is the inconsistency I am talking about:
> > getClass("POSIXt")

That is an inappropriate use of getClass with S3 classes.  It's perhaps an 
inconsistency in the methods package, but it is not in base.

> Virtual Class
> No Slots, prototype of class "NULL"
> Extends: 
> Class "POSIXct", directly
> Class "oldClass", by class "POSIXct"
> > getClass("POSIXct")
> Virtual Class
> No Slots, prototype of class "NULL"
> Extends: "oldClass"
> Known Subclasses: "POSIXt"
> > getClass("POSIXlt")
> Error in getClass("POSIXlt") : "POSIXlt" is not a defined class
> But to quote from the online help:
> "POSIXct" is more convenient for including in data frames, and "POSIXlt" is
> closer to human-readable forms. A virtual class "POSIXt" inherits from both
> of the classes: it is used to allow operations such as subtraction to mix
> the two classes. 

POSIXt is not an S4 class, and that was written before there were S4
classes in R. 

> In a S4 world wouldn't make more sense for POSIXt to be a virtual superclass
> and POSIXct and POSIXlt to be subclasses?

Well, I would have preferred class = c("POSIXct", "POSIXt"), but it was
not possible to add POSIXt that way (it was not in the first released
implementation).  Changing S4 classes is a nightmare, BTW.

As I said before, please do learn the difference between S3 and S4
classes, and that `class' and `method' (unqualified) normally mean S3.

Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

More information about the R-devel mailing list