你可以在R中使用tryCatch()函数来返回一些表达式的值,或者在遇到警告或错误时产生一个自定义信息。
这个函数使用以下基本语法:
my_function <- function(x, y){
tryCatch(
#try to do this
{
#some expression
},
#if an error occurs, tell me the error
error=function(e) {
message('An Error Occurred')
print(e)
},
#if a warning occurs, tell me the warning
warning=function(w) {
message('A Warning Occurred')
print(w)
return(NA)
}
)
}
下面的例子展示了如何在实践中使用tryCatch()函数。
例子:在R中创建一个tryCatch()函数
假设我们创建了下面这个tryCatch()函数,试图取一个值的对数,然后除以第二个值。
如果发生错误,我们将产生 "发生错误 "的消息,然后在R中打印错误。
如果发生警告,我们将产生 "发生警告 "的消息,在R中打印警告,然后返回一个NA值。
如果既没有发生错误也没有发生警告,我们将简单地返回函数的结果:
log_and_divide <- function(x, y){
tryCatch(
{
result = log(x) / y
return(result)
},
error=function(e) {
message('An Error Occurred')
print(e)
},
warning=function(w) {
message('A Warning Occurred')
print(w)
return(NA)
}
)
}
让我们在不同的场景下运行这个函数。
情景1:没有错误或警告发生
下面的代码显示了如何在没有错误或警告发生的情况下使用该函数:
#run function
log_and_divide(10, 2)
[1] 1.151293
由于没有发生错误或警告,该函数只是返回表达式的结果,结果是1.151293。
情景2:发生错误
下面的代码显示了在发生错误的情况下如何使用该函数:
#run function
log_and_divide(10)
An Error Occurred
<simpleError in doTryCatch(return(expr), name, parentenv, handler):
argument "y" is missing, with no default>
由于我们只向函数提供了一个参数,我们收到了 "发生错误"的信息,我们还看到了R产生的确切错误。
情景3:发生警告
下面的代码显示了在发生警告的情况下如何使用该函数:
#run function
log_and_divide(-10, 2)
A Warning Occurred
<simpleWarning in log(x): NaNs produced>
[1] NA
由于我们为第一个参数提供了一个负值,R无法计算负值的对数,所以我们收到了 "发生了警告"的消息,我们看到了R产生的确切警告,并且函数的结果是NA。
其他资源
下面的教程解释了如何在R中执行其他常见的操作: