Le langage R  propose 2 opérateurs logiques pour exprimer le OU  logique et  2 autres pour le ET.

Le but de ce billet est de d’expliciter les avantages que nous procurent les opérateurs logiques, dits avancés, && et || sous R.

Avantages des opérateurs logiques && et || sous R

Le principal avantage des opérateurs && et || réside sur la rapidité d’exécution. En effet, un test logique de la condition OU, implémenté avec l’opérateur || retourne le résultat une fois que la première opérande du test logique permet de le déterminer. La seconde opérande du test ( celui qui figure à droite de l’opérateur logique)  n’est évalué que si la connaissance de sa valeur est indispensable pour décider si l’expression correspondante est vrai ou fausse.

Il en est de même pour un test logique ET implémenté à l’aide de l’opérateur logique &&. Cette propriété des opérateurs logiques && et || est connue sous le nom de « court-circuit ».

Quelques exemples

Dans une expression telle que a<b && c<d, l’opérateur logique && commence par évaluer a<b. Si le résultat est FALSE, il est inutile d’évaluer c<d. Puisque, de toute façon, l’expression complète aura la valeur FALSE.

L’avantage (temps d’exécution) de ces opérateurs devient beaucoup plus intéressant lorsque l’évaluation d’une ou des deux opérandes du test demande un temps de traitement significatif.

Nous pouvons voir cela à travers l’exemple suivant où les deux opérandes sont des fonction f () et g().

f<- function(){
       Traitement 1
       Traitement 2
       ...
       Traitement n
       print("Exécution de la fonction f() terminée...")
       return(TRUE)
}
g<- function(){
       Traitement 1
       ...
       ...
       print("Exécution de la fonction g() terminée...")
       return(FALSE)
}

L’évaluation du test ci-dessous sous R :

f() || g()

Nous donne la sortie suivante  :

[1] "Exécution de la fonction f() terminée..."
[1] TRUE

Nous constatons que la fonction f()  a été exécutée. Comme son résultat est TRUE, alors, dans dans tous les cas le résultat du test global f() || g() sera TRUE. La fonction g() ne sera donc pas exécutée durant ce test. Notre programme obtient un gain en temps de traitement dû à la non exécution de la fonction g() durant ce test.

Vous pouvez vous en apercevoir en comparant la sortie ci-dessus à celle que donne le test suivant.

# Test logique avec l'opérateur OU classique.
f() | g()

Inconvénient

Le principal inconvénient des opérateurs && et || est qu’ils ne sont pas vectoriels. Vous pouvez vous en convaincre en exécutant le script ci-dessous sous R.

    u <- c( TRUE, TRUE, FALSE)
    v <- c( TRUE, TRUE, FALSE)
    u && v