R语言的状况处理(Conditions Handling)

状况(condition)输出函数

R语言提供3个函数输出状况(singalling conditions)

  • stop(..., call. = TRUE, domain = NULL)
  • warning(..., call. = TRUE, immediate. = FALSE, noBreaks. = FALSE, domain = NULL)
  • message(..., domain = NULL, appendLF = TRUE)

分别输出错误、警告、提示信息。其中,stop函数会退出程序的执行。
warning函数输出默认有cache机制,可能不回立即输出。可以设置warning的参数明确是否要立即输出,或设置options(warn = 1)。设置options(warn = 2)会把warning输出和错误输出一样,导致终止程序,这在debug的时候可以利用。

R语言还对应提供了3个忽略输出状况信息的函数:

  • stop对应try(expr)
  • warning对应suppressWarnings(expr)
  • message对应suppressMessages(expr)
    举个栗子:
suppressWarnings({
    warning("suppress!")
    warning("NO OUTPUT!")
    1
})

没有了warning输出:

> suppressWarnings({
+     warning("suppress!")
+     warning("NO OUTPUT!")
+     1
+ })
[1] 1

状况(condition)处理函数

tryCatch()和withCallingHandlers()函数提供了一种发生condition时的回调机制处理。一般形式为:

tryCatch (expr, 
error = function(cnd) {  }, # error handler code to run when error is thrown
warning = function(cnd) {  }, # warning handler code to run when warning is signalled
message = function(cnd) {  } # message handler code to run when message is signalled
finally = expr              # always run, expression to be evaluated before returning or exiting
)

withCallingHandlers(expr, 
warning = function(cnd) {  }, # warning handler code to run when warning is signalled
message = function(cnd) {  } # message handler code to run when message is signalled
)

其中,cnd为系统产生的condition对象,使用conditionMessage(cnd)能够获得condition的输出信息。
注意:

  • tryCatch只捕获一次信息,而withCallingHandlers可以捕获多次condition输出
  • 处理函数信息输入先于stop, warning, message函数的输出
  • 若expr中还有状况处理函数嵌套,从内层处理函数开始处理,向外扩展外层处理函数;这就是bubbling up处理机制。

你可能感兴趣的:(R)