2015-07-02 55 views
0

我正在使用函數「trycatch」來跳過R中的循環中的一些錯誤,我想在if語句中使用錯誤消息,但我不不知道該怎麼做。我只想在沒有錯誤的情況下遞增計數器,因爲「trycatch」正確跳過錯誤,但也會增加計數器。這是我的代碼,如果你想看到它:我如何使用一個錯誤作爲if語句在R

n=1000 

j=0 
true.out<-matrix(0,nrow=1000,ncol=500) 
ident.out<-matrix(0,nrow=1000,ncol=500) 

for(i in 1:n) 
{tryCatch({ 
serie<-gen_3_out_garch(500,0.0126,0.0757,0.9122,3,i,i,info=F,plot=T) 
info<-gen_3_out_garch(500,0.0126,0.0757,0.9122,3,i,i,info=T,plot=F) 
A<-Ric_Doornik_Ooms(serie) 

out_presenti<-info$"caratteristiche outliers"[,1] 
out_rilevati<-as.numeric(A[,1]) 
true.out[j,out_presenti]<-1 
ident.out[j,out_rilevati]<-2 

}, error=function(e){print(paste("error in rugarch")) 
        }) 
} 

但唯一想我需要知道的是如何寫的東西,如:

if("there are no errors") 
{j=j+1) 

謝謝你們的幫助

回答

0

嘗試

loadError=F 
a=try({...}) 
loadError <- (is(a, 'try-error')|is(a,'error')) 
if(loadError==F){ 
    j=j+1 
} 
+0

對不起,我不明白,我必須使用「試試看」的功能,而不是「trycatch」?然後,我的循環在trycatch函數中,我怎麼能把條件放在裏面?謝謝 –

+0

@RiccardoRedaelli如果我理解你想要什麼,請嘗試'for(i in 1:n) {loadError = F a = try({0}} {-gen_3_out_garch(500,0.0126,0.0757,0.9122,3,i ,i,info = F,plot = T) info <-gen_3_out_garch(500,0.0126,0.0757,0.9122,3,i,i,info = T,plot = F) A <-Ric_Doornik_Ooms(serie) out_presenti <-info $「caratteristiche outliers」[,1] out_rilevati <-as.numeric(A [,1]) true.out [j,out_presenti] < - 1 ident.out [j,out_rilevati] < - 2 }) loadError < - (is(a,'try-error')| is(a,'error')) if(loadError == F){ j = j + 1 } }' – Batanichek

+0

完美,即使我把A < - Ric_Doornik_Ooms(serie)放在裏面(is,(a,'try-error')|是(a,'error')),它也能正常工作,功能。非常感謝你!!!我在那裏呆了整個下午。 –

0

您可以在錯誤時返回FALSE並根據您的的返回值進行測試

for(i in 1:n) { 
    test <- tryCatch({ 
     serie <- gen_3_out_garch(500,0.0126,0.0757,0.9122,3,i,i,info=F,plot=T) 
     info <- gen_3_out_garch(500,0.0126,0.0757,0.9122,3,i,i,info=T,plot=F) 
     A <- Ric_Doornik_Ooms(serie) 

     out_presenti <- info$"caratteristiche outliers"[,1] 
     out_rilevati <- as.numeric(A[,1]) 
     true.out[j,out_presenti] <- 1 
     ident.out[j,out_rilevati] <- 2 
     TRUE 
    }, error=function(e){ 
     print(paste("error in rugarch")) 
     FALSE 
    }) 
    if (!test) j <- j+1 
} 

,或者你可以從錯誤功能增加Ĵ

tryCatch({ 
    ... 
}, error=function(e) j <<- j+1) 
+0

另一種做法是完美的。非常感謝你, –