From jhibschman at gmail.com  Tue Jun  8 16:08:53 2010
From: jhibschman at gmail.com (Johann Hibschman)
Date: Tue, 08 Jun 2010 09:08:53 -0500
Subject: [Rd] Extract/format/show for S4 objects
Message-ID: <u1oljapmxai.fsf@lx-chrateresearch01.citadelgroup.com>

Hi all,

I'm trying to make an integer-backed quarter (as in fraction of year)
class, but I can't quite it to work.  I want integer-backed so I don't
have to worry about floating-point effects when doing math, and so that
I can use it as in data.table.

First of all, is there a good reference for this anywhere?  All of the
S4 tutorials that I've found have been too high-level, and I can't find
any examples of implementing extract.  In S3, I can use [.Date as my
example, but I can't find the equivalent for S4.

Second, is this misguided?

Now for the details.  Given this start:

  library(zoo) # borrowing yearqtr for output.
  setClass("iqtr", contains="integer")
  ## Create an iqtr object from a numeric date (e.g. 2000.5).
  iqtr <- function (x) {
    iq <- as.integer(floor((as.numeric(x) - 2000) * 4 + 0.0001))
    new("iqtr", iq)
  }
  setMethod("show", "iqtr4",
            function (object) {
              cat(format(yearqtr(as.numeric(x) * 0.25 + 2000)))
            })


I have two issues:

  1. Vectors of iqtrs do not display properly.
     They print, but they don't look like vectors.
       > iq <- iqtr(seq(2000, 2002, 0.25))
       > iq
       2000 Q2 2000 Q2 2000 Q3 2000 Q4 2001 Q2 2002 Q1> 

  2. Subsets do not stay in the class.
       > iq[1:2]
       > [1] 0 1

Clearly, I'm just not understanding what's going on.  Is there a guide
for how to make printing, format, subsetting, etc., all work for S4
classes?

Thanks,
Johann



[Rd] Extract/format/show for S4 objects
Johann Hibschman