我正在使用apply函數爲我的每行數據執行一個函數。我發現如果一行數據觸發錯誤,我不會得到結果。我想知道是否有辦法讓apply函數給出有問題的行給出錯誤或NA,但仍然爲其他行運行。當數據的一行有錯誤時,應用函數停止運行
1
A
回答
2
您需要將您的應用函數包裝在tryCatch
中,如果失敗,將返回NA。
停止,如果X小於零:
> foo = function(x){if(x<0)stop("Zerrored");sqrt(x)}
試試吧
> apply(matrix(0:5),1,foo)
[1] 0.000000 1.000000 1.414214 1.732051 2.000000 2.236068
> apply(matrix(-2:5),1,foo)
Error in FUN(newX[, i], ...) : Zerrored
該死。裹在一個tryCatch
:
> tryfoo=function(x){tryCatch(foo(x),error=function(e){NA})}
> apply(matrix(-2:5),1,tryfoo)
[1] NA NA 0.000000 1.000000 1.414214 1.732051 2.000000 2.236068
工程!
您可能要提高,如果函數錯誤警告:
> tryfoo=function(x){tryCatch(foo(x),error=function(e){warning("Zerrored");NA})}
> apply(matrix(-2:5),1,tryfoo)
[1] NA NA 0.000000 1.000000 1.414214 1.732051 2.000000 2.236068
Warning messages:
1: In value[[3L]](cond) : Zerrored
2: In value[[3L]](cond) : Zerrored
同樣也不會停止適用。
+0
我有超過一個參數傳遞給函數。您能否告訴我如何在tryCatch函數中傳遞多個參數。謝謝! –
+0
如果你的函數是'foo(a,b,c)',那麼'tryfoo'是一個'function(a,b,c)',然後你將它們傳遞給你的'foo'函數。 – Spacedman
相關問題
- 1. 當用戶停止輸入文字時運行一個函數
- 2. 停止運行javascript函數
- 3. 當函數執行時QtGui.QMovie gif停止
- 4. 當用戶停止輸入但我的函數運行多次時,我必須運行一次函數
- 5. 當函數第一次運行時,mysql中更新的數據錯誤
- 6. 運行時間錯誤已停止
- 7. 如何停止點擊運行超時jquery函數並運行新函數?
- 8. 如何停止運行setTimeout函數?
- 9. 停止函數在一段時間內多次運行
- 10. 當另一個線程運行時,WPF動畫停止運行
- 11. Javascript停止函數錯誤
- 12. PHP函數停止執行 - 沒有錯誤
- 13. C++時間類沒有編譯錯誤,執行停止,應用崩潰checkDay函數中的錯誤
- 14. FSEEK錯誤,同時運行MATLAB函數
- 15. VBA運行時錯誤1004 InStr函數
- 16. display()函數導致運行時錯誤
- 17. 運行時錯誤1004 SumIf函數
- 18. C++回調函數運行時錯誤
- 19. 運行函數時發生錯誤
- 20. 當我運行插補函數的代碼時,出現錯誤
- 21. JavaScript運行時錯誤函數錯誤 - 最奇怪的錯誤
- 22. 運行函數時出錯
- 23. 程序在調用構造函數時停止運行,C++
- 24. 安卓:如何停止調用同一個函數的函數運行
- 25. 運行時錯誤:程序已停止響應
- 26. C#,函數運行後我的程序停止運行,我做錯了什麼?
- 27. 停止函數如果仍在運行,請再次運行
- 28. 當調用OnChange時運行jquery函數
- 29. 運行應用程序時的firebase數據庫錯誤
- 30. 一次執行後停止jquery函數
對於錯誤處理,請嘗試使用例如'tryCatch',看[這裏](http://stackoverflow.com/questions/22021775/i-dont-understand-how-to-catch-an-error/22021936#22021936)或[here](http:// stackoverflow.com/questions/12193779/how-to-write-trycatch-in-r) – gagolews