une instruction qui vérifie si quelque chose est vrai et sinon imprime un message d'erreur donné et quitte
Réponses:
stopifnot()
pour le test de validité, pour tester que le code fait ce qu'il est censé faire, mais if (blahdiblah) stop("error message")
pour le test d'entrée, pour tester que l'entrée du programme est valide. Seul ce dernier devrait se produire lors d'une utilisation normale.
assertthat
package de Hadley , qui donne de meilleures réponses que stopifnot
: github.com/hadley/assertthat
@Pseudo:
Vous pouvez contrôler votre message d'erreur si vous écrivez une fonction avec un nom descriptif pour tester la condition qui générera une erreur dans votre programme. Voici un exemple:
Less_Than_8 = function(x) return(x < 8)
for (i in 1:10)
{
print(i)
stopifnot(Less_Than_8(i))
}
Cela imprimera les chiffres 1 à 8, puis imprimera un message indiquant
Error: Less_Than_8(i) is not TRUE
Ce serait bien si le "i" entre parenthèses était remplacé par la valeur qui a échoué au test, mais vous en avez pour votre argent.
Si vous avez besoin de quelque chose de plus sophistiqué que cela, regardez dans Runit et testez-le comme Harlan l'a suggéré.
stopifnot()
aussi.
Ceci peut être réalisé avec la stop
commande. Cette commande interrompt l'exécution d'une fonction et affiche le message d'erreur. Par exemple, nous pouvons tester si la variable something
est FALSE
:
if(something == FALSE){
stop("error message to print")
}
De même, la warning
commande affichera un avertissement (mais continuera à exécuter le code).
if(something == FALSE){
warning("error message to print")
}
Ceux-ci sont tous deux fournis par la base R et ne nécessitent aucun package à exécuter ou à inclure dans l'écriture de vos propres fonctions. Je préfère cette approche pour écrire du code avec moins de dépendances et cette syntaxe est largement utilisée dans le développement de packages. Cependant, une fonctionnalité similaire est prise en charge par le package "assertthat" avec la assert_that
fonction qui a récemment été publiée dans le cadre du "tidyverse" de Hadley.