Есть ли способ контролировать сообщение об ошибке, которое появляется, если stopifnot () останавливается?
Ник
13
@ Ник, нет. Используйте stopifnot()для проверки достоверности, чтобы проверить, что код выполняет то, что он должен делать, но if (blahdiblah) stop("error message")для тестирования ввода, чтобы проверить правильность ввода в программу. Только последнее должно происходить при нормальном использовании.
Harlan
6
См. Также новый assertthatпакет Хэдли , который дает лучшие ответы, чем stopifnotдает: github.com/hadley/assertthat
Харлан
12
@Ник:
Вы можете управлять своим сообщением об ошибке, если напишете функцию с описательным именем, чтобы проверить условие, которое вызовет ошибку в вашей программе. Вот пример:
Вы также можете просто поместить определение функции внутрь stopifnot().
naught101
2
naught101, смысл наличия теста в именованной функции состоит в том, чтобы имя теста было напечатано в сообщении об ошибке
Мэтью
5
Это можно сделать с помощью stopкоманды. Эта команда остановит выполнение функции и напечатает сообщение об ошибке. Например, мы можем проверить , если переменная somethingявляется FALSE:
if(something ==FALSE){
stop("error message to print")}
Аналогичным образом warningкоманда выведет предупреждение (но продолжит выполнение кода).
if(something ==FALSE){
warning("error message to print")}
Оба они предоставляются базовым R и не требуют пакетов для запуска или включения в написании ваших собственных функций. Я предпочитаю этот подход для написания кода с меньшим количеством зависимостей, и этот синтаксис широко используется при разработке пакетов. Однако аналогичная функциональность поддерживается пакетом assertthat с assert_thatфункцией, которая недавно была выпущена как часть «tidyverse» Хэдли.
stopifnot()
для проверки достоверности, чтобы проверить, что код выполняет то, что он должен делать, ноif (blahdiblah) stop("error message")
для тестирования ввода, чтобы проверить правильность ввода в программу. Только последнее должно происходить при нормальном использовании.assertthat
пакет Хэдли , который дает лучшие ответы, чемstopifnot
дает: github.com/hadley/assertthat@Ник:
Вы можете управлять своим сообщением об ошибке, если напишете функцию с описательным именем, чтобы проверить условие, которое вызовет ошибку в вашей программе. Вот пример:
Это напечатает числа от 1 до 8, а затем напечатает сообщение, в котором говорится
Было бы неплохо, если бы букву «i» в круглых скобках заменили значением, которое не прошло проверку, но вы получите то, за что платите.
Если вам нужно что-то более интересное, загляните в Runit и проверьте это, как предложил Харлан.
источник
stopifnot()
.Это можно сделать с помощью
stop
команды. Эта команда остановит выполнение функции и напечатает сообщение об ошибке. Например, мы можем проверить , если переменнаяsomething
являетсяFALSE
:Аналогичным образом
warning
команда выведет предупреждение (но продолжит выполнение кода).Оба они предоставляются базовым R и не требуют пакетов для запуска или включения в написании ваших собственных функций. Я предпочитаю этот подход для написания кода с меньшим количеством зависимостей, и этот синтаксис широко используется при разработке пакетов. Однако аналогичная функциональность поддерживается пакетом assertthat с
assert_that
функцией, которая недавно была выпущена как часть «tidyverse» Хэдли.источник