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.
assertthatpacchetto di Hadley , che fornisce risposte migliori di quanto stopifnotnon 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 stopcomando. 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 warningcomando 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_thatfunzione che è stata recentemente rilasciata come parte del "tidyverse" di Hadley.