r - R 的良好编码实践:消息/猫/打印/警告/错误?
问题描述
关于 R 包开发,当函数应该返回错误消息或警告时,最好使用什么?:
cat()
print()
message()
error()
warning()
例如在这个函数中,当 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 管道中进行处理,或者编写“漂亮打印”有趣事物的函数。
用于message()
不是警告或错误但在用户没有特别请求输出的某些计算期间出现的信息性消息。例如,如果你正在开发一个包,并且你想通知用户他们可以安装一个特殊的依赖项来提高性能,你可以使用message()
来发出这个消息。用户可以使用 来禁止消息suppressMessages
。
用于warning()
指示不需要函数执行即可中止的有问题的情况。一个例子是,如果用户请求一个非常慢的动作,或者可能在以后的计算中导致数值稳定性问题。用户可以使用 来抑制警告suppressWarnings
。
如上所述,error()
当某些事情完全错误以至于函数无法继续执行时使用。可以捕获和处理错误(例如,使用tryCatch
),但用户必须专门执行此操作。
技术部分
其他函数:message
、warning
和stop
每个信号(或“抛出”)一个条件。我不会详细说明条件是什么,因为 Wickham 在Advanced R的第 8 章中介绍了它们。
非常简单的版本是这三个都向 R 运行时引入了一个信号,它自己什么都不做。然后,用户可以为特定条件安装“处理程序”,这是一个在发出条件信号时调用的函数。
message()
R 具有由和表示的条件的默认处理warning(),
程序error()
。这就是这些函数的标准行为的实现方式。
推荐阅读
- javascript - 使用回车键提交输入字段
- python - 如何理解 "{{{{{0}}}}}".format("test")
- android - 在 Google 控制台中取消审核应用版本
- python - 在 Python 中使用 push 和 pop 方法创建一个类
- javascript - ReactJS如何更新数组状态?
- javascript - 赛普拉斯可以识别默认导出函数吗?
- server - 是否有任何可以保护端口 25565 的免费或至少便宜的 DDOS 缓解服务?
- python - 对于字典中的语句,python
- windows - 为什么即使我的文件已签名,Google 仍会将其检测为恶意文件?
- sql - 根据事件确定持续时间而不使用循环