R的错误处理机制

基本用法:在自己写的函数里调用 warning("a message.") 或者 stop("a message.") 两者的区别是 warning() 不会中断你的函数, stop() 则会。

mysqrt <- function(x) {
  if (x>0) {
    warning("Only the positive square root is computed.")
    return(sqrt(x))
  } else if (x<0) {
    stop("x must be a positive number.")
  } else {
    return(0)
  }
}

大部分时候,警告/中断机制都有它存在的意义。但有时候我们要做1000次simulation, 其中要有一次 glm() 不收敛了可能整晚上的simulation就中断了。这时候怎么办?

解决方法是 tryCatch() . 写一个 inline 函数在警告的时候跑,再写一个 inline 函数在中断的时候跑。用 tryCatch() 来做这种特殊的分支。

newsqrt <- function(x) {
  tryCatch(mysqrt(x),
           warning=function(msg) {
             print(paste("Caught warning message:", msg))
             return(-x)
           },
           error=function(msg) {
             print(paste("Caught fatal message:", msg))
             return(NA)
           }
           )
}

  1. 发表评论

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: