¿Hay alguna forma de controlar el mensaje de error que se informa si stopifnot () se detiene?
Nick
12
@Nick, no. Úselo stopifnot()para pruebas de validez, para probar que el código está haciendo lo que se supone que debe hacer, pero if (blahdiblah) stop("error message")para pruebas de entrada, para probar que la entrada al programa es válida. Solo esto último debería ocurrir durante el uso normal.
Harlan
6
Consulte también el nuevo assertthatpaquete de Hadley , que ofrece mejores respuestas que las que stopifnotofrece: github.com/hadley/assertthat
Harlan
12
@Mella:
Puede controlar su mensaje de error si escribe una función con un nombre descriptivo para probar la condición que arrojará un error en su programa. He aquí un ejemplo:
También puede poner la definición de la función dentro stopifnot().
naught101
2
naught101, el objetivo de tener la prueba en una función con nombre es imprimir el nombre de la prueba en el mensaje de error
Mateo
4
Esto se puede lograr con el stopcomando. Este comando detendrá la ejecución de una función e imprimirá el mensaje de error. Por ejemplo, podemos probar si la variable somethinges FALSE:
if(something ==FALSE){
stop("error message to print")}
De manera similar, el warningcomando imprimirá una advertencia (pero continuará ejecutando el código).
if(something ==FALSE){
warning("error message to print")}
Ambos son proporcionados por base R y no requieren paquetes para ejecutar o incluir por escrito sus propias funciones. Prefiero este enfoque para escribir código con menos dependencias y esta sintaxis se usa ampliamente en el desarrollo de paquetes. Sin embargo, el paquete "assertthat" admite una funcionalidad similar con la assert_thatfunción que se ha lanzado recientemente como parte del "tidyverse" de Hadley.
stopifnot()
para pruebas de validez, para probar que el código está haciendo lo que se supone que debe hacer, peroif (blahdiblah) stop("error message")
para pruebas de entrada, para probar que la entrada al programa es válida. Solo esto último debería ocurrir durante el uso normal.assertthat
paquete de Hadley , que ofrece mejores respuestas que las questopifnot
ofrece: github.com/hadley/assertthat@Mella:
Puede controlar su mensaje de error si escribe una función con un nombre descriptivo para probar la condición que arrojará un error en su programa. He aquí un ejemplo:
Esto imprimirá los números del 1 al 8, luego imprimirá un mensaje que dice
Sería bueno si la "i" entre paréntesis fuera reemplazada por el valor que no pasó la prueba, pero obtienes lo que pagas.
Si necesita algo más elegante que eso, busque en Runit y pruébelo como sugirió Harlan.
fuente
stopifnot()
.Esto se puede lograr con el
stop
comando. Este comando detendrá la ejecución de una función e imprimirá el mensaje de error. Por ejemplo, podemos probar si la variablesomething
esFALSE
:De manera similar, el
warning
comando imprimirá una advertencia (pero continuará ejecutando el código).Ambos son proporcionados por base R y no requieren paquetes para ejecutar o incluir por escrito sus propias funciones. Prefiero este enfoque para escribir código con menos dependencias y esta sintaxis se usa ampliamente en el desarrollo de paquetes. Sin embargo, el paquete "assertthat" admite una funcionalidad similar con la
assert_that
función que se ha lanzado recientemente como parte del "tidyverse" de Hadley.fuente