处理 R 编程中的错误
错误处理是我们处理可能导致程序在执行期间异常终止的不需要或异常错误的过程。在 R 编程中,基本上有两种方法可以实现错误处理机制。我们可以直接调用诸如 stop() 或 warning() 之类的函数,也可以使用诸如“warn”或“warning.expression”之类的错误选项。可用于代码中错误处理的基本功能:
- stop(…) :它停止对当前语句的评估并生成一个消息参数。控件返回到顶层。
- waiting(…) :它的评估取决于错误选项 warn 的值。如果警告的值为负,则将其忽略。如果值为 0(零),它们仅在顶级函数完成执行后存储和打印。如果值为 1(一),则在遇到它时立即打印,如果值为 2(二),则生成的警告立即转换为错误。
- tryCatch(…) :它有助于评估代码并分配异常。
R中的条件处理
通常,如果我们在执行程序时遇到任何意外错误,我们需要一种高效且交互式的方式来调试错误并了解哪里出了问题。但是,会出现一些错误,但有时模型无法拟合并引发错误。基本上有三种方法来处理 R 中的这种情况和错误:
- try() :即使发生错误,它也可以帮助我们继续执行程序。
- tryCatch() :它有助于处理条件并根据条件控制发生的情况。
- withCallingHandlers() :它是 tryCatch() 的替代方法,负责处理本地处理程序。
R中的try-catch-finally
与Java、C++ 等其他编程语言不同,try-catch-finally 语句在 R 中用作函数。在 tryCatch() 中要处理的主要两个条件是“错误”和“警告”。
句法:
check = tryCatch({
expression
}, warning = function(w){
code that handles the warnings
}, error = function(e){
code that handles the errors
}, finally = function(f){
clean-up code
})
例子:
R
# R program illustrating error handling
# Applying tryCatch
tryCatch(
# Specifying expression
expr = {
1 + 1
print("Everything was fine.")
},
# Specifying error message
error = function(e){
print("There was an error message.")
},
warning = function(w){
print("There was a warning message.")
},
finally = {
print("finally Executed")
}
)
R
# R program illustrating error handling
# Evaluation of tryCatch
check <- function(expression){
withCallingHandlers(expression,
warning = function(w){
message("warning:\n", w)
},
error = function(e){
message("error:\n", e)
},
finally = {
message("Completed")
})
}
check({10/2})
check({10/0})
check({10/'noe'})
输出:
[1] "Everything was fine."
[1] "finally Executed"
R中的withCallingHandlers()
在 R 中, withCallingHandlers()是tryCatch()的变体。唯一的区别是 tryCatch() 处理退出处理程序,而 withCallingHandlers() 处理本地处理程序。
例子:
R
# R program illustrating error handling
# Evaluation of tryCatch
check <- function(expression){
withCallingHandlers(expression,
warning = function(w){
message("warning:\n", w)
},
error = function(e){
message("error:\n", e)
},
finally = {
message("Completed")
})
}
check({10/2})
check({10/0})
check({10/'noe'})
输出: