Skip to content

RFC: Redefining length(<POSIXlt>) ?

3 messages · Martin Maechler, Gabor Grothendieck, Gregor Gorjanc

#
So I did open a new subject and move the discussion to R-devel
now.
>>>>> "Gabor" == Gabor Grothendieck <ggrothendieck at gmail.com>
  >>>>>     on Sun, 23 Jul 2006 09:02:35 -0400 writes:

      Gabor> Looking at the diff.POSIXt code we see the problem is
      Gabor> that it takes the length of the input using length
      Gabor> which is wrong since in the case of POSIXlt the
      Gabor> length is always 9 (or maybe length should be defined
      Gabor> differently for POSIXlt?).

    MM> Though I agree with Spencer that a user may expect
    MM> length() to behave differently, but I don't think this
    MM> would be a good idea.  Yes, length() is generic, but its
    MM> help() emphasizes that for lists, length() should be the
    MM> number of list elements.  Of course anyone one *can*
    MM> define length() methods that behave differently for
    MM> his/her classes, but then one would also want to make
    MM> sure that e.g.  x[length(x)] or 'x[length(x)] <- value'
    MM> works and -- in a case of simple S3 class built on a
    MM> list, would work differently than if x was a the simple list.

Hmm, after thinking a bit more, and particularly after seeing
all the other methods we already have working for "POSIXlt",
I'm much less sure if  (re)definining  length(<POSIXlt>) 
would be such a bad idea.
Indeed, "[", and "[<-" and "[[" already work with an implicit
length of 'length_of_series' and not length 9, and so does str().

So it seems to me, there is more reasonable momentum *for* a
length.POSIXlt() method than I first considered.

Still not sure what the wisest decision would be, and I am
asking for more opinions or arguments pro / con.
Since Brian Ripley has done the most work on the POSIX[cl]?t
classes, we should also wait on his opinion.

Martin

    MM> In my view, I would only consider redefing length() for
    MM> "non-basic" S4 classes, i.e. those with slots, where no
    MM> confusion is possible, since these objects are
    MM> definitely not simple vectors nor lists (aka "generic"
    MM> vectors).
#
I think Spencer's point of it likely being compatible with most
current code is important (since it currently always returns
9 so its unlikely to be used meaningfully in existing code).
On 7/24/06, Martin Maechler <maechler at stat.math.ethz.ch> wrote:
#
Hi,

Martin Maechler <maechler <at> stat.math.ethz.ch> writes:
I think that having generic for POSIXlt would be more natural than default
length, which is (as stated by Gabor) always 9. When I see a date or time with
all additions I always think of it as one "element". So it would be naturaly
that length() would return number of dates/times in POSIXlt object.

Gregor