【问题标题】:Error Handling with do.calldo.call 的错误处理
【发布时间】:2016-05-09 03:34:28
【问题描述】:

我有下面的代码,它使用 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 包装在tryCatch 中可能会起作用。在此处尝试代码(但将 expr 替换为您的 Arima(dataTrain, order=c(a,b,c))stackoverflow.com/questions/36683031/…
  • @jaimedash 谢谢! tryCatch 成功了。
  • 酷。我将其发布为答案,但如果它没有按书面形式工作,请随时编辑该答案或发布您自己的答案。欢呼

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


【解决方案1】:

替换

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

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

【讨论】:

  • 嘿,如果您想获得奖励积分,我在代码中添加了接下来的几个步骤,我在其中预测模型,然后选择最小化地图的模型。我现在在最后一步遇到错误,因为我认为 NAN 是由 tryCatch 引入的。我想跳过 NAN 并返回最小化 mape 的模型。任何提示将不胜感激。
  • 嘿,抱歉,我不确定。我刚刚开始运行您的代码,但在我不得不离开之前花了很长时间。你应该 1)缩小你的例子的大小,只包括一个适合 NaN 和 2)(如果你想让其他人尝试回答它)写一个新问题。 (你可以从它链接回这个,但尽量让它自包含)
  • oops 可能不需要运行您的代码。在最后一步之前尝试Acc_res = Acc_res[!is.nan(Acc_res)]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多