2016-05-09 2 views
1

У меня есть следующий код, который создает матрицу с любой возможной комбинацией из 3 параметров, а затем создает модель аримы для каждого набора параметров. Иногда шаг слесаря, где он обучает модели, выдает ошибку и уходит. Я хотел бы изменить код так, чтобы, если 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)) 

Update:

## 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

обертывание 'Ari ma' в 'tryCatch' может работать. попробуйте код здесь (но замените 'expr' своим' Arima (dataTrain, order = c (a, b, c)) ': https://stackoverflow.com/questions/36683031/trycatch-suppress-error-message/ 36683369 # 36683369 – jaimedash

+0

@jaimedash Спасибо! TryCatch сделал трюк. – user3476463

+0

классный. Я отправил это как ответ, но если он не работал так, как написано, не стесняйтесь редактировать этот ответ или публиковать свои собственные. Cheers – jaimedash

ответ

1

заменить

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

с

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

Эй, если бы вы например, для получения бонусных очков. Я добавил следующие несколько шагов в свой код, где я прогнозировал модели, а затем выбираю модель, которая сводит к минимуму карту. Я получаю сообщение об ошибке на последнем этапе, потому что я думаю, что NAN , я хотел бы просто пропустить NAN и вернуть модель, которая сводит к минимуму карту. Любые советы будут очень полезны. – user3476463

+0

эй, извините, я не уверен. Я только начал запускать ваш код, но это заняло слишком много времени, прежде чем я должен был уйти. Вам следует: 1) сократить ваш пример по размеру чтобы просто включить подгонку, которая дает «NaN» и 2) (если вы хотите, чтобы кто-нибудь еще попытался ответить на него), напишите новый вопрос. (Вы могли бы связать это с ним, но попытайтесь сделать это самостоятельно) – jaimedash

+0

oops, возможно, не нужно запускать ваш код. попробуйте 'Acc_res = Acc_res [! is.nan (Acc_res)]' до вашего последнего шага – jaimedash

Смежные вопросы