Skip to content

Ops.ts returns non-ts object for univariate operations (PR#7152)

2 messages · jpalmucci@machineinsight.com, Brian Ripley

#
Full_Name: Jeff Palmucci
Version: 1.9.1
OS: XP
Submission from: (NULL) (129.44.190.60)


Ops.ts returns a non-time series object for univariate operations. Here is a
patch:

Ops.ts <- function(e1, e2)
{
    if(missing(e2)) {
        ## univariate operator
      result <- NextMethod(.Generic)
      attributes(result) <- attributes(e1)
      result
    } else if(any(nchar(.Method) == 0)) {
        ## one operand is not a ts
        NextMethod(.Generic)
    } else {
        nc1 <- NCOL(e1)
        nc2 <- NCOL(e2)
        ## use ts.intersect to align e1 and e2
        e12 <- .cbind.ts(list(e1, e2),
                         c(deparse(substitute(e1))[1],
                           deparse(substitute(e2))[1]),
                         union = FALSE)
        e1 <- if(is.matrix(e1)) e12[, 1:nc1, drop = FALSE] else e12[, 1]
        e2 <- if(is.matrix(e2)) e12[, nc1 + (1:nc2), drop = FALSE]
        else e12[, nc1 + 1]
        NextMethod(.Generic)
    }
}
#
How about a statement of the problem and an example?  It is not clear to
me that there is anything here that is not intentional, and the stated
analysis is plain wrong: Ops.ts _is_ called for univariate "-" and _does_
return a time series.

Both +a.ts and -a.ts return a ts.  !a.ts does not, but we expect time 
series to be numeric so that is deliberate.  (Copying attributes wily-nily 
when changing mode is not a good idea.)
On Tue, 3 Aug 2004 jpalmucci@machineinsight.com wrote: