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")
)