Using apply (or sapply) on an mts object removes its time series properties when sending to function. How should I apply same function (with ts input and ts output) on each of times series in an mts object and return it (preferably as mts) [I mean besides using for loops]?
For example suppose I write a function that returns the trend of a time series (using stl)
myfunc <- function(x) {
return(stl(x,"per")$time.series[,2])
}
Now for a sample mts
z <- ts(matrix(rnorm(90), 30, 3), start=c(1961, 1), frequency=4)
class(z)
Sending only one of the time series works correct:
myfunc(z[,1]) # works correctly, returns the trend of first series
My function is not designed for multiple time series so:
myfunc(z) # will not work returning the error below
Error in stl(x, "per") : only univariate series are allowed
Using apply on the mts object send each of the time series as a vector, not preserving its time series properties (tsp):
apply(z,2,myfunc) # will not work returning the error below
Error in stl(x, "per") :
series is not periodic or has less than two periods