如何在 r 中编写第一个 trycatch() 函数


您可以使用 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 中执行其他常见操作:

如何在 R 中创建嵌套 For 循环
如何使用R中的循环向向量添加值
如何返回R中函数的值

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注