Dan*_*Dan 96 assert language-design r assertions
一个声明,检查某些内容是否为真,如果没有则打印给定的错误消息并退出
CCC*_*CCC 12
@缺口:
如果编写具有描述性名称的函数来测试将在程序中引发错误的条件,则可以控制错误消息.这是一个例子:
Less_Than_8 = function(x) return(x < 8)
for (i in 1:10)
{
print(i)
stopifnot(Less_Than_8(i))
}
Run Code Online (Sandbox Code Playgroud)
这将打印数字1到8,然后打印出一条消息
Error: Less_Than_8(i) is not TRUE
Run Code Online (Sandbox Code Playgroud)
如果括号中的"i"被替换为未通过测试的值,那将是很好的,但是你可以得到你付出的代价.
如果你需要比这更漂亮的东西,请查看Runit并测试Harlan建议的那些.
这可以通过stop命令来实现。此命令将停止函数的执行并打印错误消息。例如,我们可以测试变量something是否为FALSE:
if(something == FALSE){
stop("error message to print")
}
Run Code Online (Sandbox Code Playgroud)
同样,该warning命令将打印警告(但继续执行代码)。
if(something == FALSE){
warning("error message to print")
}
Run Code Online (Sandbox Code Playgroud)
这些都是由基础 R 提供的,并且不需要运行包或在编写您自己的函数时包含这些包。我更喜欢这种方法来编写依赖较少的代码,并且这种语法在包开发中被广泛使用。但是,“assertthat”包支持类似的功能,该包assert_that最近作为 Hadley 的“tidyverse”的一部分发布了该功能。