使用do.call进行错误处理

时间:2016-05-09 03:34:29

标签: r loops time-series vectorization do.call

我在下面的代码中创建了一个矩阵,其中包含3个参数的每个可能组合,然后为每组参数创建arima模型。有时候,训练模型的钳工步骤会引发错误并退出。我想修改代码,以便如果fitter抛出错误而不是退出它只是跳过参数组合并继续到矩阵中的下一行。任何提示将不胜感激。

代码:

library("fpp")

dataTrain <- window(hsales,end=1989.99)

p1<-1:10
d1<-1:2
q1<-1:7

paramtrix<-expand.grid(p1,d1,q1)

modbuilder <- function(a,b,c) {Arima(dataTrain, order=c(a,b,c))}
fitter <- do.call(Vectorize(modbuilder, SIMPLIFY=FALSE), unname(paramtrix))

更新

## Forecasting/Accuracy of models
funcCast<-function(x){forecast(x,h=20)$mean}
ModCast<-lapply(fitter,funcCast)

ModAcc<-function(x){accuracy(x,tsTest)[1,5]}
TestAcc<-lapply(ModCast,ModAcc)

##Find Model that minimizes mape

Acc_res<-do.call(rbind,TestAcc)
res_num <- which(Acc_res==min(Acc_res))  
res_model<-fitter[[res_num]] ## Error being introduced by NAN

1 个答案:

答案 0 :(得分:1)

替换

Arima(dataTrain, order=c(a,b,c))

tryCatch(Arima(dataTrain, order=c(a,b,c)), error = function(e) {})