在发送到函数时,在 mts 对象上使用 apply(或 sapply)会删除其时间序列属性。我应该如何在 mts 对象中的每个时间序列上应用相同的函数(使用 ts 输入和 ts 输出)并返回它(最好作为 mts)[我的意思是除了使用 for 循环]?
例如假设我编写了一个返回时间序列趋势的函数(使用 stl)
myfunc <- function(x) {
return(stl(x,"per")$time.series[,2])
}
现在为示例 mts
z <- ts(matrix(rnorm(90), 30, 3), start=c(1961, 1), frequency=4)
class(z)
仅发送一个时间序列可以正常工作:
myfunc(z[,1]) # works correctly, returns the trend of first series
我的函数不是为多个时间序列设计的,所以:
myfunc(z) # will not work returning the error below
Error in stl(x, "per") : only univariate series are allowed
在 mts 对象上使用 apply 将每个时间序列作为向量发送,而不保留其时间序列属性 (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