[R]例外處理的常用寫法

R的例外處理:本範例設計了一個function,內部使用tryCatch函數,用來處理型態轉換產生的問題,進行測試。

Convert.stringToInt <- function(str)
{
    #例外處理參考來源:http://mazamascience.com/WorkingWithData/?p=912
    tryCatch(  #注意C為大寫
        {
            if(str == "0")
            {
                stop("can not input zero") #故意產生例外,並自行產生錯誤訊息
            }
            else {
                if(typeof(as.numeric(str)) == "double")  #將字串轉為數字
                {          
                    return(as.numeric(str))
                } 
            }
        }
        ,warning = function(war)
        {
            print(paste("ting's warning:", war));
        }
        ,error = function(err)
        {
            print(paste("ting's error:",conditionMessage(err) ))   #用來取得原始的錯誤訊息
        }
        ,finally ={
            print("ting's finally");
        }
    )

}

Convert.stringToInt("1");
Convert.stringToInt("0")
Convert.stringToInt("Ting");

執行結果如下圖:

> Convert.stringToInt("1");
[1] "ting's finally"
[1] 1
> Convert.stringToInt("0")
[1] "ting's error: can not input zero"
[1] "ting's finally"
> Convert.stringToInt("Ting");
[1] "ting's warning: simpleWarning in doTryCatch(return(expr), name, parentenv, handler): NAs introduced by coercion\n"
[1] "ting's finally"
>