Відповіді:
stopifnot()
для тестування на валідність, для тестування того, що код робить те, що він повинен робити, але if (blahdiblah) stop("error message")
для вхідного тестування, щоб перевірити, чи є вхід в програму дійсним. Тільки останні повинні колись траплятися під час звичайного використання.
assertthat
пакет Хадлі , який дає кращі відповіді, ніж stopifnot
це: github.com/hadley/assertthat
@Nick:
Ви можете керувати своїм повідомленням про помилку, якщо ви пишете функцію з описовим іменем, щоб перевірити умову, яка призведе до помилки у вашій програмі. Ось приклад:
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 і перевірте, як запропонував Гарлан.
stopifnot()
.
Цього можна досягти за допомогою stop
команди. Ця команда зупинить виконання функції та надрукує повідомлення про помилку. Наприклад, ми можемо перевірити , якщо змінна something
є FALSE
:
if(something == FALSE){
stop("error message to print")
}
Аналогічно warning
команда надрукує попередження (але продовжуйте виконувати код).
if(something == FALSE){
warning("error message to print")
}
Обидва вони надаються базовою R і не вимагають жодних пакунків для запуску або включення в письмовій формі власних функцій. Я віддаю перевагу такому підходу для написання коду з меншою кількістю залежностей, і цей синтаксис широко використовується в розробці пакунків. Однак аналогічну функціональність підтримує пакет "assrtthat" з assert_that
функцією, яка нещодавно була випущена як частина "Tidyverse" Хедлі.