R中Try and Catch的寫法

在R裡的Try and Catch可能比較少人用到 因為R code出現錯誤時不會導致R整個停機 只會出現錯誤訊息 而且可以繼續運作

但是因為我的系統是用Java去call R,R如果有error會停止運作然後害我整個系統死機

所以我需要一個方法可以先楨測我的R code有沒有error,如果有錯就不往下執行了

範例如下:
如果我直接在R裡面執行
a<-'abc'
b<-1
c<-b/a
會看直接看到錯誤,因為我不能把字串去除以一個數值
所以我加了try and catch之後
Erroresult<- tryCatch({
     a<-'abc'
     b<-1
     c<-b/a
 }, warning = function(war) {
     print(paste("MY_WARNING:  ",war))
 }, error = function(err) {
     print(paste("MY_ERROR:  ",err))
 }, finally = {
     print(paste("End Try&Catch"))
 })

結果就會像這樣了,Error已經不是紅色,而是一個字串輸出,可以像我一樣把tryCatch的結果再另存到一個變數,例如Erroresult,這樣你就可以把這個error message存著

Try and Catch的架構像這樣,其中warning,error,finally的結構一定要有,不然會報錯


tryCatch({

#要執行的指令放這裡

},warning = function(war){
  print(paste("MY_WARNING:  ",war)) #如果有warning則輸出warning,"MY_WARNING:  "這一行可以自己改
},error = function(err) {
  print(paste("MY_ERROR:  ",err))   #如果有error則輸出error,"MY_Error:  "這一行可以自己改
},finally = {
  print(paste("End Try&Catch")) #最後一定要執行的指令或輸出
})

留言

  1. R 看起來就很難,在台灣會的人多嗎?

    回覆刪除
  2. 我覺得R至少比Java簡單很多 主要是統計或數學領域在用的 因為他免費 所以國外很多公司都有用 而且也很流行 如果妳學的話也一定很快就會了

    回覆刪除

張貼留言

這個網誌中的熱門文章

如何將DSM(NAS)變成Mail Server

如何安裝.tgz的檔案至Ubuntu