Arrêter (tout de suite)

Programmation R défensive

Dr. Colin Gillespie

Jumping Rivers

J'ai vu le panneau

Parfois, ça brise tout

  • Il faut lever une erreur

Par exemple :

1 + "stuff"
Error in 1 + "stuff": non-numeric argument to binary operator
Programmation R défensive

Arrêtez tout de suite, merci bien

Pour lever une erreur, on utilise la fonction stop()

stop("A Euro 1996 error has occurred")
# Error: A Euro 1996 error has occurred
conf_int <- function(mean, std_dev) {
   if(std_dev <= 0) 
       stop("Standard deviation must be positive")

   c(mean - 1.96 * std_dev, mean - 1.96 * std_dev)
}
Programmation R défensive

Interceptez-les tant que c'est possible

  • Vous ne pouvez pas supprimer (ou ignorer) les erreurs
    • Par définition, R ne peut pas continuer
    • À la place, on intercepte les erreurs

Programmation R défensive

La fonction try()

La fonction try() agit un peu comme suppress()

res <- try("Scotland" + "World cup", silent = TRUE)

Elle tente d'exécuter ; si ça échoue, elle passe à la suite

Programmation R défensive

L'idiome try()

res <- try("Scotland" + "World cup", silent = TRUE)
res
[1] 'Error in "Scotland" + "World cup": non-numeric argument to binary operator'
attr(,"class")
[1] "try-error"
attr(,"condition")
<simpleError in "Scotland" + "World cup": 
                            non-numeric argument to binary operator>
Programmation R défensive

L'idiome try()

result <- try("Scotland" + "World cup", silent = TRUE)
class(result)
[1] "try-error"
if(class(result) == "try-error")
  ## Faire quelque chose d'utile
Programmation R défensive

Passons à la pratique !

Programmation R défensive

Preparing Video For Download...