From maechler at stat.math.ethz.ch  Tue Aug 10 10:05:00 2004
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Tue Aug 10 10:05:01 2004
Subject: [Rd] Subsetting time series
In-Reply-To: <Pine.LNX.4.44.0408100537040.13142-100000@gannet.stats>
References: <41183AA0.8010203@stat.auckland.ac.nz>
	<Pine.LNX.4.44.0408100537040.13142-100000@gannet.stats>
Message-ID: <16664.33196.178734.309201@gargle.gargle.HOWL>

>>>>> "BDR" == Prof Brian Ripley <ripley@stats.ox.ac.uk>
>>>>>     on Tue, 10 Aug 2004 05:47:28 +0100 (BST) writes:

    BDR> On Tue, 10 Aug 2004, Ross Ihaka wrote:
    >> Rob Hyndman wrote:
    >> > When part of a time series is extracted, the time series component is 
    >> > lost. e.g.,
    >> > x <- ts(1:10)
    >> > x[1:4]
    >> > 
    >> > It would be nice if there was a subsetting function [.ts to avoid this 
    >> > problem. However, it is beyond my R-coding ability to produce such a 
    >> > thing.  Is someone willing to do it?

    BDR> There is a [.ts, in src/library/stats/R/ts.R, and it is documented 
    BDR> (?"[.ts").

    >> Have you had a look at "window"?  The problem with "["
    >> its that it can produce non-contiguous sets of values.

    BDR> Yes.

indeed.  window() is what we have been advocation for a long
time now ... (but see below).

    BDR>   If you look in the sources for [.ts you will see,
    BDR> commented, the code that was once there to handle cases
    BDR> where the index was evenly spaced.  But it was removed
    BDR> long ago in favour of window().  I tried to consult the
    BDR> logs, but it seems that in the shift from CVS to SVN
    BDR> recently I can't get at them.  I think the rationale
    BDR> was that x[ind] should always produce an object of the
    BDR> same class.

well, that can't have been the only rationale since now
x[ind] is *not* of the same class - when the "ts" property is
lost in any case.

I don't much like the current behavior of "[.ts" either.
It should either work by returning the "ts" object in the
equidistant case  and give a warning (at least) in the
non-equidistant case.
OTOH, intuitively, when 'ind' has length 1,  x[ind] should just
give a number... [grumble..]
But maybe it's only a very small performance hit when that
continues to carry the "ts" class attribute along.

If we think of the data.frame analogue, we might consider
defining "[[.ts" for extracting numbers and "[.ts" to always
return a time series or an error.
But that is probably too much incompatible to current behavior.

Martin


[Rd] Subsetting time series
Martin Maechler