2010-02-10 9 views

Respuesta

99

stopifnot()

También puede estar interesado en paquetes como Runit y testthat para las pruebas unitarias.

+0

¿Hay alguna forma de controlar el mensaje de error que se informa si se detiene stopifnot()? – Nick

+10

@Nick, no. Use 'stopifnot()' para la prueba de validez, para probar que el código está haciendo lo que se supone que debe hacer, pero 'if (blahdiblah) stop (" error message ")' para la prueba de entrada, para probar que la entrada al programa es válido. Solo esto último debería ocurrir durante el uso normal. – Harlan

+4

Vea también el nuevo paquete 'assertthat' de Hadley, que da mejores respuestas que' stopifnot': https://github.com/hadley/assertthat – Harlan

11

@ Nick:

Puede controlar su mensaje de error si se escribe una función con un nombre descriptivo para probar la condición de que generará un error en su programa. He aquí un ejemplo:

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

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

Esto imprimirá los números del 1 al 8, a continuación, imprimir un mensaje que dice

Error: Less_Than_8(i) is not TRUE 

Sería bueno si la "i" entre paréntesis fue sustituido por el valor que no pasó la prueba, pero obtienes lo que pagas.

Si necesita algo más elegante que eso, mire en Runit y pruebe eso, como sugirió Harlan.

+0

También puede poner la definición de la función dentro de 'stopifnot()' también. – naught101

+1

naught101, el punto de tener la prueba en una función nombrada es obtener el nombre de la prueba impresa en el mensaje de error – Matthew

Cuestiones relacionadas