Chapitre 6. Programmation en R
225
> vect <- 1:10
> class(vect)
[1] "integer"
> vect
[1] 1 2 3 4 5 6 7 8 9 10
> print(vect)
[1] 1 2 3 4 5 6 7 8 9 10
Jusqu’ici, rien d’apparemment surprenant, except´ e peut-ˆ etre qu’il faut souligner que la simple saisie d’un objet R en ligne de commande semble provoquer
un appel de la fonction print() avec pour param` etre effectif l’objet consid´ er´ e. Cette id´ ee
8 est confirm´ ee par un deuxi` eme exemple illustrant l’affichage
d’un objet de classe formula caract´ eris´ e par la pr´ esence du caract` ere tilde
(∼). L’exemple suivant enregistre dans la variable form la formule (de classe
formula) exprimant la relation entre y et x. Notez qu’ici les objets y et x n’ont
pas besoin d’exister puisqu’aucune ´ evaluation n’est faite lors de la d´ eclaration
d’une formule
9 .
> form <- y∼x
> class(form)
[1] "formula"
> form
y ∼ x
> print(form)
y ∼ x
On peut remarquer que la fonction print() fonctionne diff´ eremment pour
des objets de classes diff´ erentes. En effet, pour la variable form (de classe
"formula"), print() a renvoy´ e y∼x (c’est-` a-dire l’instruction pr´ esente ` a droite
de la fl` eche d’affectation. Pour la variable vect, l’appel de print() renvoie [1]
1 2 3 4 5 6 7 8 9 10 alors que l’on aurait pu s’attendre ` a voir s’afficher
1:10. Voici le code de la fonction print() :
> print
function (x, ...)
UseMethod("print")
Le corps de cette fonction indique que la fonction UseMethod() doit ˆ etre ex´ ecut´ ee. Cette fonction est appel´ ee en R fonction g´ en´ erique. Comme une tour de
contrˆ ole, elle sert `
a rediriger l’objet selon sa classe sur le bon appel de fonction.
Pour le dernier exemple ci-dessus, cela a pour cons´ equence d’appeler la fonction
d’affichage associ´ ee ` a la classe de l’objet formula de la forme print.formula().
8. En fait, pour l’auto-affichage des objets de base (vecteurs, matrices, listes, etc.) dans
la console, R n’utilise pas la fonction print(), mais appelle la fonction PrintValueEnv, cod´ ee
en C, ` a laquelle l’utilisateur n’a pas un acc` es direct
9. Nous ne rentrons pas davantage dans les d´ etails ` a ce stade, car nous reviendrons plus
tard sur cette classe d’objets tr` es originale.
225
> vect <- 1:10
> class(vect)
[1] "integer"
> vect
[1] 1 2 3 4 5 6 7 8 9 10
> print(vect)
[1] 1 2 3 4 5 6 7 8 9 10
Jusqu’ici, rien d’apparemment surprenant, except´ e peut-ˆ etre qu’il faut souligner que la simple saisie d’un objet R en ligne de commande semble provoquer
un appel de la fonction print() avec pour param` etre effectif l’objet consid´ er´ e. Cette id´ ee
8 est confirm´ ee par un deuxi` eme exemple illustrant l’affichage
d’un objet de classe formula caract´ eris´ e par la pr´ esence du caract` ere tilde
(∼). L’exemple suivant enregistre dans la variable form la formule (de classe
formula) exprimant la relation entre y et x. Notez qu’ici les objets y et x n’ont
pas besoin d’exister puisqu’aucune ´ evaluation n’est faite lors de la d´ eclaration
d’une formule
9 .
> form <- y∼x
> class(form)
[1] "formula"
> form
y ∼ x
> print(form)
y ∼ x
On peut remarquer que la fonction print() fonctionne diff´ eremment pour
des objets de classes diff´ erentes. En effet, pour la variable form (de classe
"formula"), print() a renvoy´ e y∼x (c’est-` a-dire l’instruction pr´ esente ` a droite
de la fl` eche d’affectation. Pour la variable vect, l’appel de print() renvoie [1]
1 2 3 4 5 6 7 8 9 10 alors que l’on aurait pu s’attendre ` a voir s’afficher
1:10. Voici le code de la fonction print() :
function (x, ...)
UseMethod("print")
Le corps de cette fonction indique que la fonction UseMethod() doit ˆ etre ex´ ecut´ ee. Cette fonction est appel´ ee en R fonction g´ en´ erique. Comme une tour de
contrˆ ole, elle sert `
a rediriger l’objet selon sa classe sur le bon appel de fonction.
Pour le dernier exemple ci-dessus, cela a pour cons´ equence d’appeler la fonction
d’affichage associ´ ee ` a la classe de l’objet formula de la forme print.formula().
8. En fait, pour l’auto-affichage des objets de base (vecteurs, matrices, listes, etc.) dans
la console, R n’utilise pas la fonction print(), mais appelle la fonction PrintValueEnv, cod´ ee
en C, ` a laquelle l’utilisateur n’a pas un acc` es direct
9. Nous ne rentrons pas davantage dans les d´ etails ` a ce stade, car nous reviendrons plus
tard sur cette classe d’objets tr` es originale.
