Czy istnieje sposób kontrolowania komunikatu o błędzie, który jest zgłaszany po zatrzymaniu funkcji stopifnot ()?
Nick
13
@Nick, nie. Używaj stopifnot()do testowania poprawności, aby sprawdzić, czy kod robi to, co powinien, ale if (blahdiblah) stop("error message")do testowania danych wejściowych, aby sprawdzić, czy dane wejściowe do programu są prawidłowe. Tylko to ostatnie powinno się zdarzyć podczas normalnego użytkowania.
Harlan,
6
Zobacz także nowy assertthatpakiet Hadley , który daje lepsze odpowiedzi niż stopifnotte: github.com/hadley/assertthat
Harlan
12
@Nacięcie:
Możesz kontrolować swój komunikat o błędzie, jeśli napiszesz funkcję z opisową nazwą, aby przetestować warunek, który spowoduje błąd w programie. Oto przykład:
Możesz po prostu umieścić definicję funkcji stopifnot()również wewnątrz .
naught101
2
naught101, celem przeprowadzenia testu w nazwanej funkcji jest uzyskanie nazwy testu wydrukowanej w komunikacie o błędzie
Matthew
5
Można to osiągnąć za pomocą stoppolecenia. To polecenie zatrzyma wykonywanie funkcji i wyświetli komunikat o błędzie. Na przykład możemy sprawdzić, czy zmienna somethingto FALSE:
if(something ==FALSE){
stop("error message to print")}
Podobnie warningpolecenie wyświetli ostrzeżenie (ale będzie kontynuować wykonywanie kodu).
if(something ==FALSE){
warning("error message to print")}
Oba są dostarczane przez podstawową 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ą liczbą zależności, a ta składnia jest szeroko stosowana w tworzeniu pakietów. Jednak podobną funkcjonalność obsługuje pakiet „assertthat” z assert_thatfunkcją, która została niedawno wydana jako część pakietu „tidyverse” Hadleya.
stopifnot()
do testowania poprawności, aby sprawdzić, czy kod robi to, co powinien, aleif (blahdiblah) stop("error message")
do testowania danych wejściowych, aby sprawdzić, czy dane wejściowe do programu są prawidłowe. Tylko to ostatnie powinno się zdarzyć podczas normalnego użytkowania.assertthat
pakiet Hadley , który daje lepsze odpowiedzi niżstopifnot
te: github.com/hadley/assertthat@Nacięcie:
Możesz kontrolować swój komunikat o błędzie, jeśli napiszesz funkcję z opisową nazwą, aby przetestować warunek, który spowoduje błąd w programie. Oto przykład:
Spowoduje to wydrukowanie liczb od 1 do 8, a następnie wydrukowanie komunikatu
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 wyszukanego, zajrzyj do Runita i przetestuj, jak zasugerował Harlan.
źródło
stopifnot()
również wewnątrz .Można to osiągnąć za pomocą
stop
polecenia. To polecenie zatrzyma wykonywanie funkcji i wyświetli komunikat o błędzie. Na przykład możemy sprawdzić, czy zmiennasomething
toFALSE
:Podobnie
warning
polecenie wyświetli ostrzeżenie (ale będzie kontynuować wykonywanie kodu).Oba są dostarczane przez podstawową 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ą liczbą zależności, a ta składnia jest szeroko stosowana w tworzeniu pakietów. Jednak podobną funkcjonalność obsługuje pakiet „assertthat” z
assert_that
funkcją, która została niedawno wydana jako część pakietu „tidyverse” Hadleya.źródło