una dichiarazione che controlla se una cosa è vera e se non stampa un messaggio di errore dato ed esceR ha un'asserzione come in python?
79
A
risposta
99
11
@ Nick:
È possibile controllare il messaggio di errore se si scrive una funzione con un nome descrittivo per testare la condizione che genera un errore nel 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 stampare un messaggio che dice
Error: Less_Than_8(i) is not TRUE
Sarebbe bello se la "i" tra parentesi è stato sostituito con il valore che fallito il test, ma ottieni quello per cui paghi.
Se hai bisogno di qualcosa di più bello di quello, guarda in Runit e prova quello che Harlan ha suggerito.
C'è un modo per controllare il messaggio di errore che viene segnalato se stopifnot() si arresta? – Nick
@Nick, no. Usa 'stopifnot()' per i test di validità, per verificare che il codice stia facendo quello che dovrebbe fare, ma 'if (blahdiblah) si ferma (" messaggio di errore ")' per test di input, per verificare che l'input per il programma sia valido. Solo quest'ultimo dovrebbe mai accadere durante il normale utilizzo. – Harlan
Vedere anche il nuovo pacchetto 'assertthat' di Hadley, che fornisce risposte migliori di quelle di" stopifnot': https://github.com/hadley/assertthat – Harlan