2016-10-06 67 views
0

我不是真正瞭解tryCatch如何工作。尤其是存儲錯誤信息的最後部分。在Stackoverflow上有很多關於如何使用tryCatch的帖子,但解決方案通常只是發佈錯誤消息,然後繼續前進。我想存儲發生錯誤的for循環的索引,以便稍後可以輕鬆地回到它們。我在思索着什麼用tryCatchtryCatch存儲標誌和存儲索引,其中發生錯誤

flag = NULL 

    for(i in 1:10) { 
     do something that can cause an error 
     if (error occurs) flag=c(flag,i) and move on to the next iteration 
    } 

理想我想flag錯誤期間存儲的指標如下。

+0

如果你正在爲(我:10)''那麼我假設'我'是一個常數。你是否想爲(我在1:10)或類似的事情做?此外,你讀過[這個答案](http://stackoverflow.com/a/12195574/2573061)? – C8H10N4O2

+0

@ C8H10N4O2是查看更正 – MHH

回答

1

您可能必須使用<<-才能分配給父環境,但這可能被認爲是不好的做法。例如:

a <- as.list(1:3) 
flag <- integer() 
for (i in 1L:5L){ 
    tryCatch(
    { 
     print(a[[i]]) 
    }, 
    error=function(err){ 
     message('On iteration ',i, ' there was an error: ',err) 
     flag <<-c(flag,i) 
    } 
) 
} 
print(flag) 

返回:

[1] 1 
[1] 2 
[1] 3 
On iteration 4 there was an error: Error in a[[i]]: subscript out of bounds 

On iteration 5 there was an error: Error in a[[i]]: subscript out of bounds 

> print(flag) 
[1] 4 5 

這是否幫助?