我已經編寫了一個R腳本,其中包含一個用於檢索外部(Web)數據的循環。數據的格式大部分時間都是相同的,但有時格式會以不可預知的方式變化,並且我的循環崩潰(停止運行)。R腳本 - 如何在錯誤時繼續執行代碼
有沒有辦法繼續代碼執行,無論錯誤?我正在尋找類似於來自VBA的「On error Resume Next」。
預先感謝您。
我已經編寫了一個R腳本,其中包含一個用於檢索外部(Web)數據的循環。數據的格式大部分時間都是相同的,但有時格式會以不可預知的方式變化,並且我的循環崩潰(停止運行)。R腳本 - 如何在錯誤時繼續執行代碼
有沒有辦法繼續代碼執行,無論錯誤?我正在尋找類似於來自VBA的「On error Resume Next」。
預先感謝您。
您可以使用try
:
# a has not been defined
for(i in 1:3)
{
if(i==2) try(print(a),silent=TRUE)
else print(i)
}
使用try
或tryCatch
。
for(i in something)
{
res <- try(expression_to_get_data)
if(inherits(res, "try-error"))
{
#error handling code, maybe just skip this iteration using
continue
}
#rest of iteration for case of no error
}
在我看來,使用tryCatch代替try,更清晰的語法和更多的控制。 – Hansi 2012-01-13 17:53:58
@Hansi:同意'tryCatch'一旦你知道它就更清潔了,雖然需要更長的時間才能理解,所以我認爲'try'更適合VBA程序員。 <*ducks*> – 2012-01-13 18:00:50
如何有關此相關的問題這些解決方案:
Is there a way to `source()` and continue after an error?
無論parse(file = "script.R")
隨後在結果中的每一表達loop'd try(eval())
。
或evaluate
包。
感謝您的快速響應。如果我想在擴展爲多行的代碼中應用「try」,那麼語法是什麼? – 2012-01-13 15:00:51
我想用一個函數:'try([在這裏插入一個函數]) – 2012-01-13 15:10:57
或者使用分號:'try({a <-1; 2 + 2})' – 2012-01-13 15:23:58