Risposte:
stopifnot()
per il test di validità, per verificare che il codice stia facendo quello che dovrebbe fare, ma if (blahdiblah) stop("error message")
per il test di input, per verificare che l'input al programma sia valido. Solo quest'ultimo dovrebbe mai accadere durante il normale utilizzo.
assertthat
pacchetto di Hadley , che fornisce risposte migliori di quanto stopifnot
non faccia: github.com/hadley/assertthat
@ Nick:
Puoi controllare il tuo messaggio di errore se scrivi una funzione con un nome descrittivo per testare la condizione che genererà un errore nel tuo programma. Ecco un esempio:
Less_Than_8 = function(x) return(x < 8)
for (i in 1:10)
{
print(i)
stopifnot(Less_Than_8(i))
}
Questo stamperà i numeri da 1 a 8, quindi stamperà un messaggio che dice
Error: Less_Than_8(i) is not TRUE
Sarebbe bello se la "i" tra parentesi fosse sostituita con il valore che non ha superato il test, ma ottieni quello per cui paghi.
Se hai bisogno di qualcosa di più elaborato di quello, dai un'occhiata a Runit e provalo come suggerito da Harlan.
stopifnot()
.
Questo può essere ottenuto con il stop
comando. Questo comando interromperà l'esecuzione di una funzione e stamperà il messaggio di errore. Ad esempio, possiamo verificare se la variabile something
è FALSE
:
if(something == FALSE){
stop("error message to print")
}
Allo stesso modo, il warning
comando stamperà un avviso (ma continuerà a eseguire il codice).
if(something == FALSE){
warning("error message to print")
}
Questi sono entrambi forniti dalla base R e non richiedono pacchetti per essere eseguiti o includere nella scrittura le proprie funzioni. Preferisco questo approccio per scrivere codice con meno dipendenze e questa sintassi è ampiamente utilizzata nello sviluppo di pacchetti. Tuttavia, funzionalità simili sono supportate dal pacchetto "assertthat" con la assert_that
funzione che è stata recentemente rilasciata come parte del "tidyverse" di Hadley.