我正在将auto.arima
和xreg
和do.call
一起使用。我已经意识到,在某些时间序列上,它运作良好,但对于另一些时间序列,则会产生以下无法解决的错误:
dimnames(x)<-dn中的错误: 'dimnames'[2]的长度不等于数组范围
这是一个可重复的案例:
# packages needed
require(magrittr)
require(forecast) # version 8.5
# create argument list
args=list()
args$y<-ts(c(100:140,rep(200,4),380,250),start=c(2016,1),frequency = 52)
args$seasonal<-F
args$xreg<-(diag(length(args$y))%>%.[,-c(1:24)])
# this works well
fit1<-auto.arima(y=args$y,seasonal=args$seasonal,xreg=args$xreg)
# but this does NOT work, although everything is the same!
fit2<-do.call(auto.arima,args)
# however, if we change arguments slightly, do.call works well, as seen below:
args$y<-ts(10:20,start=c(2016,1),frequency = 52)
args$xreg<-(diag(length(args$y))%>%.[,-c(1:4)])
fit2<-do.call(auto.arima,args)
我不知道问题出在哪里,auto.arima或do.call函数。
编辑:我在将auto.arima参数作为...
的函数中使用auto.arima。换句话说,我不确切知道将预先提供哪些参数。一个有效的答案应该适用于以下代码:
foo<-function(vec_ts,...){
args = list(...)
args$y<-vec_ts # time series vector
fit<-do.call(auto.arima,args)
}
...
可以包含xreg,也可以不包含xreg。如果没有xreg,则上面的功能就像一个超级按钮一样起作用。但是,当...
包含xreg矩阵时,它有时不起作用(并非总是如此)。