Есть ли в R утверждение assert, как в python? - PullRequest
95 голосов
/ 10 февраля 2010

оператор, который проверяет, является ли что-то истинным, а если нет, печатает данное сообщение об ошибке и завершает работу

Ответы [ 3 ]

119 голосов
/ 10 февраля 2010

stopifnot()

Вас также могут заинтересовать такие пакеты, как Runit и testthat для модульного тестирования.

12 голосов
/ 26 августа 2011

@ Ник:

Вы можете контролировать свое сообщение об ошибке, если напишите функцию с описательным именем для проверки условия, которое вызовет ошибку в вашей программе. Вот пример:

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" значением, которое не прошло тест, но вы получите то, за что платите.

Если вам нужно что-то более необычное, посмотрите на Рунит и проверьте, как предложил Харлан.

2 голосов
/ 01 июня 2018

Этого можно достичь с помощью команды stop. Эта команда остановит выполнение функции и выведет сообщение об ошибке. Например, мы можем проверить, является ли переменная something ложной:

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

Аналогично, команда warning выведет предупреждение (но продолжит выполнение кода).

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

Они оба предоставляются base R и не требуют никаких пакетов для запуска или включения в написание ваших собственных функций. Я предпочитаю такой подход для написания кода с меньшим количеством зависимостей, и этот синтаксис широко используется в разработке пакетов. Однако аналогичные функциональные возможности поддерживаются пакетом assertthat с функцией assert_that, которая недавно была выпущена как часть "Tidyverse" Хэдли.

...