使用 do.call 进行错误处理
Error Handling with do.call
我有下面的代码,它创建了一个包含 3 个参数的所有可能组合的矩阵,然后为每组参数创建了一个 arima 模型。有时,训练模型的 fitter 步骤会抛出错误并退出。我想修改代码,以便如果 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
替换
Arima(dataTrain, order=c(a,b,c))
和
tryCatch(Arima(dataTrain, order=c(a,b,c)), error = function(e) {})
我有下面的代码,它创建了一个包含 3 个参数的所有可能组合的矩阵,然后为每组参数创建了一个 arima 模型。有时,训练模型的 fitter 步骤会抛出错误并退出。我想修改代码,以便如果 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
替换
Arima(dataTrain, order=c(a,b,c))
和
tryCatch(Arima(dataTrain, order=c(a,b,c)), error = function(e) {})