很多时候简单的try函数就能够增加脚本的鲁棒性,随着脚本逐渐复杂,一些较高级的错误处理函数就必不可少了,我们今天来介绍几个R中的
tryCatch({
log(-1) # 可能错误的代码
}, warning = function(w) {
print("警告")
}, error = function(e) {
print("错误")
}, finally = {
print("这是最终的代码块,无论如何都会执行")
})
功能: stopifnot() 函数用于断言检查,确保给定的条件为真。如果条件不满足,则函数会产生错误。这是一种快捷的方式来保证函数的输入或状态符合预期。
myFunction <- function(x) {
stopifnot(is.numeric(x), x > 0)
# 如果 x 不是数值类型或者不大于0,上面的代码会停止执行并抛出错误 ... has_na <- anyNA(marker_table(nested_results[[res_name]])$enrich_group) stopifnot(!has_na)
# 其他计算
}
myFunction("a") # 会抛出错误
功能: 这两个函数用于更复杂的错误处理场景。withCallingHandlers() 允许定义错误处理程序,而 withRestarts() 允许定义恢复点,以便在错误发生时选择不同的恢复策略。
withCallingHandlers({
withRestarts({
sqrt(-1) # 产生错误的代码
}, myRestart = function() "选择了自定义的恢复策略")
}, warning = function(w) {
print("发生了警告")
}, error = function(e) {
invokeRestart("myRestart")
})
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!