gpt4 book ai didi

r - 警告和消息有什么区别?

转载 作者:行者123 更新时间:2023-12-02 19:14:36 26 4
gpt4 key购买 nike

我已阅读 http://adv-r.had.co.nz/Exceptions-Debugging.html据我了解,我们有三种主要类型的条件(我称之为错误):

  • 错误
  • 警告
  • 留言

据我所知,错误是一种非常不恰当的东西,它可能对我们的功能造成非常大的危害(最严重的错误类型)。但我无法区分警告和消息。我会说一条消息共享有关我们代码的某些可能错误部分的附加信息,但这不会直接影响我们的代码(这意味着我们的代码可以工作,但还有一些我们应该注意的附加信息)。

  • 警告和提醒之间到底有什么区别?
  • 我是否正确理解错误的含义?

最佳答案

首先,您应该清楚“错误”是什么意思。错误只是您的代码的一部分,它没有按照您预期的方式运行。您的代码可能有错误,但不会给出任何错误、警告或消息。例如,下面的函数有一个明显的错误:

add_two_numbers <- function(a, b)
{
return(a - b);
}

add_two_numbers(2, 2)
#> [1] 0

糟糕!我想让它加上数字,但我的函数却减去了它们。 那是一个bug,如果我在这个阶段没有发现它,那么我以后依靠它来进行计算可能会遇到麻烦。

错误、警告和消息不是错误。他们是故意的。它们由功能或程序包的作者设置,以确保软件按预期工作,并在用户尝试执行软件不打算执行或无法执行的操作时提醒用户。

当函数必须停止计算并中止时,通常会使用错误。这在测试函数输入时很有用:

add_two_numbers <- function(a, b) {
if(!is.numeric(a)) stop(paste(a, "is not a number"))
if(!is.numeric(b)) stop(paste(b, "is not a number"))

return(a + b)
}

add_two_numbers("hello", 2)
#> Error in add_two_numbers("hello", 2): hello is not a number

add_two_numbers(2, "world")
#> Error in add_two_numbers(2, "world"): world is not a number

add_two_numbers(2, 2)
#> [1] 4

您会注意到对该函数的前两次调用没有返回任何内容 - 它们只是发出错误并停止。

我们可能想要这样做的原因是试图给用户一些有用的指导。例如,如果我们刚刚:

add_two_numbers <- function(a, b) a + b

然后当我们尝试传递错误的参数类型时,我们会得到:

add_two_numbers("hello", 2)
#> Error in a + b : non-numeric argument to binary operator

这个错误是由 R 解析器抛出的,与我们的具体消息相比有点模糊。当我们编写自己的错误消息时,我们试图预测更基本的错误何时会发生并阻止它发生,以防止它发生并为我们的用户提供有用的信息。

同样,我们可以写一条警告信息。这通常在我们想让用户知道某些事情可能会产生意想不到的结果时使用。例如:

as.numeric(c("1", "2", "3", " "))
#> [1] 1 2 3 NA
#> Warning message:
#> NAs introduced by coercion

我们是否希望将空白区域转换为 NA,或者空白区域是数据输入错误吗?两者都可能为真,因此该函数会继续处理数据并提供输出,但会警告您这可能不是您所期望的。

如果我们想要一个发出警告的函数,很容易写一个:

pointless <- function() {
warning("This function is pointless")
return(1)
}

pointless()
#> [1] 1
#> Warning message:
#> In pointless() : This function is pointless

所以我们的函数仍然会返回一个答案,但它会在我们使用它时给我们一个显着的警告。

最后,消息就是这样 - 给用户的消息不构成函数输出的一部分,也不一定是坏消息,但向控制台写入一条消息可能是有用的信息。

add_two_numbers <- function(a, b) {
message("Have a nice day")
return(a + b)
}

add_two_numbers(2, 2)
#> Have a nice day
#> [1] 4

关于r - 警告和消息有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63846536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com