2016-05-09 40 views
1

我有下面的代碼創建一個矩陣,每個可能的3個參數組合,然後爲每組參數創建一個arima模型。有時候訓練模型的鉗工步驟會拋出錯誤並退出。我想修改代碼,這樣如果fitter拋出一個錯誤而不是退出它,只需跳過該參數組合並繼續到矩陣中的下一行。任何提示將非常感謝。錯誤處理do.call

代碼:

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 
+0

包裹'Arima'在'tryCatch'可能工作。嘗試這裏的代碼(但用你的'Arima(dataTrain,order = c(a,b,c))'代替'expr':':https://stackoverflow.com/questions/36683031/trycatch-suppress-error-message/ 36683369#36683369 – jaimedash

+0

@jaimedash謝謝!tryCatch訣竅。 – user3476463

+0

很酷。我張貼了一個答案,但如果它沒有'寫作的工作,隨時編輯該答案或張貼自己的。歡呼 – jaimedash

回答

1

更換

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

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

嘿,如果你願意喜歡去獎勵積分我已經在我的代碼中添加了接下來的幾個步驟,在那裏我預測了模型,然後選擇了最小化該模型的模型。現在我在最後一步發現錯誤,因爲我認爲NAN我想只是跳過NAN,並返回最小化mape的模型,任何提示將不勝感激 – user3476463

+0

嘿,對不起,我不確定,我剛剛開始運行你的代碼,但是,在我不得不離開之前需要很長時間,你應該1)縮小你的範例只包括一個給出'NaN'的適合和2)(如果你想讓其他人試圖回答它)寫一個新的問題。 (你可以從它鏈接回這個,但試圖讓它自成一體) – jaimedash

+0

oops可能不需要運行你的代碼。在最後一步之前嘗試'Acc_res = Acc_res [!is.nan(Acc_res)]' – jaimedash