Czy R ma polecenie assert jak w Pythonie?

Instrukcja, która sprawdza, czy coś jest prawdą, a jeśli nie wypisuje podany komunikat o błędzie i kończy działanie

Author: smci, 2010-02-10

3 answers

stopifnot()

Możesz być również zainteresowany pakietami takimi jak Runit i testthat do testów jednostkowych.

 124
Author: Harlan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-06 18:54:31

@ Nick:

Możesz kontrolować komunikat o błędzie, jeśli napiszesz funkcję o opisowej nazwie, aby przetestować warunek, który spowoduje błąd w twoim programie. Oto przykład:

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

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

To wyświetli liczby od 1 do 8, a następnie wyświetli komunikat o treści

Error: Less_Than_8(i) is not TRUE

Byłoby miło, gdyby " i " w nawiasach zostało zastąpione wartością, która nie przeszła testu, ale dostajesz to, za co płacisz.

Jeśli potrzebujesz czegoś bardziej fantazyjnego, zajrzyj do Runit i przetestuj to, jak zasugerował Harlan.

 12
Author: CCC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-25 22:02:44

Można to osiągnąć za pomocą polecenia stop. To polecenie zatrzyma wykonywanie funkcji i wyświetli komunikat o błędzie. Na przykład możemy sprawdzić, czy zmienna something to FALSE:

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

Podobnie, polecenie warning wyświetli ostrzeżenie (ale kontynuuje wykonywanie kodu).

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

Oba są dostarczane przez base R i nie wymagają żadnych pakietów do uruchamiania lub dołączania do pisania własnych funkcji. Wolę takie podejście do pisania kodu z mniejszą ilością zależności i ta składnia jest szeroko stosowany w tworzeniu pakietów. Jednak podobną funkcjonalność obsługuje pakiet "assertthat" z funkcją assert_that, która została niedawno wydana jako część "tidyverse" Hadleya.

 5
Author: Tom Kelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-05 15:23:48