2013-07-24 154 views
0

我在R中運行一個複雜但相對較快的模擬(每次模擬需要大約5-10分鐘),並且我開始與各種輸入值並行運行它,以便測試R我的一些算法。忽略R中的錯誤

似乎存在一個問題:某些輸入安排會在模擬內導致致命錯誤,並且整個代碼崩潰,從而導致模擬結束。是否有一種簡單的方法來捕捉錯誤(可能來自各種位置),並忽略這些輸入值並轉移到下一個?

當我設置一組輸入來檢查是否需要5-6小時才能完成所有模擬,然後回來發現它在前45分鐘內崩潰時,這很令人沮喪。

雖然我努力解決導致我遇到錯誤的錯誤/識別輸入,但在錯誤發生時如何忽略/捕獲錯誤?

感謝

+0

在'try'或'tryCatch'中換行 – James

+0

看看'tryCatch',例如[here](http://stackoverflow.com/questions/12193779/how-to-write-trycatch-in- r)或[hadley的教程](https://github.com/hadley/devtools/wiki/Exceptions-Debugging#using-trycatch)。 – Thomas

+0

@Thomas - 哈德利教程的鏈接是死路一條。 – swihart

回答

1

我不知道該怎麼做你組織你的模擬,但我猜UU有,你檢查每一步使用新參數的循環。可以使用tryCatch。如果我輸入錯誤,我在這裏拋出一個錯誤。

step.simul <- function (x) { 
    stopifnot(x%%2 == 1, x>0) 
    (x - 1)/2 
} 

然後使用tryCatch,我旗壞輸入,告訴你有關的壞輸入一個代碼 :

sapply(1:5, function(i)tryCatch(step.simul(i), error=function(e)-1000-i)) 
[1]  0 -1002  1 -1004  2 

正如你看到我的模擬運行在所有的循環索引。