web-dev-qa-db-fra.com

Est-ce que R a une déclaration d'assertion comme en python?

une déclaration qui vérifie si quelque chose est vrai et sinon imprime un message d'erreur donné et se termine

90
Dan

stopifnot()

Vous pourriez également être intéressé par des paquets tels que Runit et testthat pour les tests unitaires.

114
Harlan

@Entaille:

Vous pouvez contrôler votre message d'erreur si vous écrivez une fonction avec un nom descriptif pour tester la condition qui provoquera 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))
}

Ceci imprimera les chiffres de 1 à 8, puis imprimera un message disant 

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, jetez un coup d'œil à Runit et testez-le comme l'a suggéré Harlan.

11
CCC

Ceci peut être réalisé avec la commande stop. 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 commande warning affichera un avertissement (mais continuera à exécuter le code).

if(something == FALSE){
   warning("error message to print)
}

Celles-ci sont toutes deux fournies par la base R et ne nécessitent aucun package pour s'exécuter ou pour écrire 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, des fonctionnalités similaires sont prises en charge par le paquet "assertthat" avec la fonction assert_that récemment publiée dans le cadre du "tidyverse" de Hadley.

0
Tom Kelly