GNU Rで例外処理(try-catch)

GNU Rで例外処理(try-catch)をすることが(たまに)あるのですが、どうしてもその使い方が覚えられず、(必要になると毎回)googleで検索して時間の無駄なので、自分用の覚書:

RのtryCatchは

tryCatch(
   {処理本体},
   warning = function(w) {警告(warning)が発生した場合の処理}, 
   error = function(e) {エラー(error)が発生した場合の処理},
   finally = {最終的な処理}
   )

という構文になっており、「{処理本体}」の部分に「警告やエラーが発生するコード」を書き、警告が発生した場合に行う処理をwarningに、エラーが発生した場合に行う処理をerrorに書いておく(finallyは最終的な処理を書く)。

言葉で説明するとさっぱり分からないかもしれないので、簡単なコード例を以下に示します。

# An example of tryCatch()
# 配列aaの範囲外を表示して、エラー発生させる
# [References]
# http://mazamascience.com/WorkingWithData/?p=912

aa <- array(1:3, c(1,3))
aa[1,2] <- NA
arri <- 4

# Simple example
tryCatch(
    {aa[1, arri]}, 
    warning = function(aa){cat("A warning.\n ")},
    error = function(aa){cat("An error.\n ")},
    finally=cat("(A simple example).\n")
    )

# An example which an error occur in a for-loop
tryCatch(
    {for(ii in 1:arri){cat(aa[1,ii],"\n")}}, 
    warning = function(aa){cat("A warning.\n ")},
    error = function(aa){cat("An error in function.\n ")},
    finally=cat("(A for-loop example).\n")
    )

[参考文献]
http://mazamascience.com/WorkingWithData/?p=912