R在python中有一个断言语句吗?

Dan*_*Dan 96 assert language-design r assertions

一个声明,检查某些内容是否为真,如果没有则打印给定的错误消息并退出

Har*_*lan 122

stopifnot()

您还可能有兴趣在像包Runittestthat进行单元测试.

  • @Nick,不.使用`stopifnot()`进行有效性测试,测试代码是否正在执行它应该做的事情,但是`if(blahdiblah)stop("错误消息")`用于输入测试,以测试程序的输入是有效.只有后者才能在正常使用过程中发生. (12认同)
  • 另请参阅Hadley的新`assertthat`包,它提供了比`stopifnot`更好的答案:https://github.com/hadley/assertthat (6认同)

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建议的那些.

  • naught101,在命名函数中进行测试的目的是获取错误消息中打印的测试名称 (2认同)

Tom*_*lly 5

这可以通过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”的一部分发布了该功能。