状况(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
处理机制。