关于R包开发,当函数应该返回错误消息或警告时,最好使用什么?:
cat()
打印()
消息()
error()
警告()
例如在这个函数中,当 a 或 b 不是数字时,我应该使用哪个来返回错误消息。
function_sum_two_nums <- function(a, b){
## Check if the a and b are numbers
if(is.numeric(a) & is.numeric(b)){
return(a+b)
} else{
print/cat/message/error/warning('a or b are not numbers')
}
}
最佳答案
你的例子
在这种特殊情况下,唯一明智的选择是使用 stop()
,因为这种情况是错误的,而您想停止该函数从遇到错误时继续。
其他选项将允许代码执行继续,返回函数中最后计算的表达式。这不是您想要的。
一般情况
当您想为最终用户提供输出时,请使用 print()
。在相同情况下,使用 cat()
可以更好地控制输出。这不适合“库代码”,因为它不容易被抑制。但是,这是执行任务的正确方法,例如将数据发送到标准输出以便在 shell 管道中进行处理,或者编写“ pretty-print ”有趣内容的函数。
将 message()
用于信息性消息,这些消息不是警告或错误,而是在用户未明确请求输出的某些计算过程中出现的。例如,如果您正在开发一个包,并且您想要通知用户他们可以安装一个特殊的依赖项以提高性能,您可以使用 message()
来发出此消息。用户可以使用 suppressMessages
抑制消息。
使用 warning()
来指示不需要函数执行来中止的问题情况。例如,如果用户请求的操作非常慢,或者可能会在以后的计算中导致数值稳定性问题。用户可以使用 suppressWarnings
抑制警告。
如上,当出现完全错误以至于函数无法继续执行时,使用error()
。可以捕获和处理错误(例如,使用 tryCatch
),但用户必须明确地做到这一点。
技术部分
其他函数:message
、warning
和stop
每个信号(或“抛出”)一个条件。我不会详细说明条件是什么,因为 Wickham 在 chapter 8 of Advanced R 中介绍了它们.
非常简单的版本是所有这 3 个都向 R 运行时引入一个信号,它自己什么都不做。然后,用户可以为特定条件安装“处理程序”,这是一个在发出条件信号时调用的函数。
R 对于由 message()
、warning(),
和 error()
发出信号的条件有默认处理程序。这就是这些函数的标准行为是如何实现的。
关于r - R : message/cat/print/warning/error? 的良好编码习惯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68711678/