R에는 파이썬에서와 같이 assert 문이 있습니까?


97

어떤 것이 참인지 확인하고 그렇지 않은 경우 주어진 오류 메시지를 인쇄하고 종료하는 문

답변:


123

stopifnot()

단위 테스트를 위해 Runittestthat 과 같은 패키지에 관심이있을 수도 있습니다 .


stopifnot ()이 중지되면보고되는 오류 메시지를 제어하는 ​​방법이 있습니까?
Nick

12
@ 닉, 아니. stopifnot()유효성 테스트에 사용 하여 코드가 수행해야하는 작업을 수행하는지 if (blahdiblah) stop("error message")테스트 하지만 입력 테스트의 경우 프로그램에 대한 입력이 유효한지 테스트합니다. 후자 만 정상적인 사용 중에 발생해야합니다.
Harlan

6
또한 해들리의 새로운보기 assertthat보다 더 나은 해답을 제공 패키지, stopifnot수행을 : github.com/hadley/assertthat
할란

12

@새긴 금:

설명이 포함 된 이름으로 함수를 작성하여 프로그램에서 오류를 발생시키는 조건을 테스트하는 경우 오류 메시지를 제어 할 수 있습니다. 예를 들면 다음과 같습니다.

Less_Than_8 = function(x) return(x < 8)

for (i in 1:10)
{
  print(i)
  stopifnot(Less_Than_8(i))
}

그러면 1부터 8까지의 숫자가 인쇄되고 다음과 같은 메시지가 인쇄됩니다.

Error: Less_Than_8(i) is not TRUE

괄호 안의 "i"를 테스트에 실패한 값으로 바꾸면 좋을 것입니다.

그보다 더 멋진 것이 필요하면 Runit을 살펴보고 Harlan이 제안한대로 테스트하십시오.


함수 정의 stopifnot()도 넣을 수 있습니다 .
naught101 2013

2
naught101, 명명 된 함수에서 테스트를 수행하는 요점은 오류 메시지에 인쇄 된 테스트의 이름을 가져 오는 것입니다
Matthew

4

이것은 stop명령 으로 수행 할 수 있습니다 . 이 명령은 함수 실행을 중지하고 오류 메시지를 인쇄합니다. 예를 들어 변수 somethingFALSE다음 과 같은지 테스트 할 수 있습니다 .

if(something == FALSE){
   stop("error message to print")   
}

마찬가지로 warning명령은 경고를 인쇄하지만 코드는 계속 실행합니다.

if(something == FALSE){
   warning("error message to print")   
}

이들은 모두 기본 R에서 제공하며 자체 함수를 작성하는 데 패키지를 실행하거나 포함 할 필요가 없습니다. 이 방법은 의존성이 적은 코드를 작성하는 데 선호되며이 구문은 패키지 개발에 널리 사용됩니다. 그러나 유사한 기능은 assert_thatHadley의 "tidyverse"의 일부로 최근에 출시 된 기능이 포함 된 "assertthat"패키지에서 지원됩니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.