Chapitre 6. Programmation en R
221
– op´ erateur binaire (deux param` etres) :

o` u de mani` ere explicite d´ esigne l’op´ erateur, et et
d´ esignent les param` etres effectifs de l’op´ erateur. Voici une liste
non exhaustive des op´ erateurs utilis´ es en interne par le R :
+, -, * , /, ^, %%, %/%, &, |, !, ==, !=, <, <=, >=, >.
Ces op´ erateurs sont a priori non modifiables par l’utilisateur
4 . Le R propose
toutefois ` a l’utilisateur la possibilit´ e de d´ efinir ses propres op´ erateurs. Ils sont
de la forme %% et certains sont d´ ej` a propos´ es dans le syst` eme de
base, par exemple %in% et %o% (vus au chapitre 3).
Astuce
Pour afficher le code source de la fonction (l’op´ erateur) %in%, utilisez
l’instruction : get("%in%"). Vous pouvez alors constater qu’il utilise la
fonction match() dont il peut ˆ etre int´ eressant de connaˆ ıtre l’existence.
Donnons-nous comme objectif de proposer une forme plus synth´ etique pour
concat´ ener les chaˆ ınes de caract` eres, ce qui se fait normalement ` a l’aide de la
fonction paste().
> "%+%" <- function(ch1,ch2) paste(ch1,ch2,sep="")
> nom <- "Pierre"
> "La vie de " %+% nom %+% " est belle!"
[1] "La vie de Pierre est belle!"
> # On obtient donc une simplification de:
> paste("La vie de ", nom ," est belle!",sep="")
[1] "La vie de Pierre est belle!"
Notons que le nom non alphanum´ erique de la fonction nous contraint ` a le
placer entre des guillements. Bien entendu, la pr´ ef´ erence entre l’une ou l’autre
de ces deux formes est compl` etement arbitraire. Aussi, il n’est pas question
ici d’amoindrir l’int´ erˆ et de la fonction paste() qui est une fonction bien plus
riche que le simple op´ erateur %+% que nous venons d’introduire (au moyen de
la fonction paste() d’ailleurs). Le but est plutˆ ot de montrer la flexibilit´ e du R
en nous permettant, ` a l’aide d’une simple d´ efinition de fonction, de simplifier
la syntaxe d’appel.
4. En fait, ce groupe d’op´ erateurs est utilisable par un utilisateur lors du d´ eveloppement
d’une nouvelle classe d’objets. Mais cela nous am` enerait trop loin !
Précédent

- 254/701

Suivant