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)
時系列の1つだけを送信すると正しく機能します。
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