226
Le logiciel R - Maˆ ıtriser le langage
Pour reprendre le jargon commun´ ement utilis´ e en programmation orient´ ee objet, ce dernier type de fonction de forme g´ en´ erale . est appel´ e m´ ethode. Cela nous ´ eclaire sur la d´ enomination de la fonction UseMethod()
dans le corps de la fonction g´ en´ erique print().
Voil` a donc ce qui se passe en coulisse en lieu et place d’un simple affichage
de l’objet form :
> form # Provoque un appel de la fonction print(),
# elle-même appelant la fonction print.formula().
y ∼ x
> stats:::print.formula(form)
y ∼ x
Expert
Pour v´ erifier comment il est facile de changer le comportement g´ en´ eral
du R par la simple modification d’une fonction, red´ efinissons la fonction
d’affichage pour la classe formula. On se contentera de reprendre l’affichage
standard en y adjoignant la chaˆ ıne de caract` eres "formule :".
> print.formula <- function(obj,...) {
+ cat(paste("formule:",paste(sapply(obj[c(2,1,3)],
+
as.character),collapse="")))
+ invisible(obj)
+ }
> y∼x
formule: y∼x
Si vous ˆ etes d´ ebutant en R, le but n’est pas ici de comprendre pr´ ecis´ ement le code R ayant permis d’obtenir le r´ esultat. En effet, malgr´ e la
simplicit´ e apparente du code, il faut pour le maˆ ıtriser connaˆ ıtre des notions
que l’on ne pourra aborder dans cet ouvrage. Encore une fois, le but est plutˆ ot de r´ ev´ eler la puissance introspective du R puisqu’il permet notamment
la manipulation de ses entit´ es de base.
Pour r´ etablir le comportement initial du R quant ` a l’affichage des formules, vous aurez certainement compris qu’une simple ´ elimination de la
nouvelle fonction print.formula() suffit via l’instruction en ligne de commande rm(print.formula). Nous ne le supprimons pas encore, car nous
avons besoin de ce comportement par la suite.
Donc, si nous avons bien compris le fonctionnement de la fonction print(),
nous pourrions supposer l’existence d’une fonction print.integer(). Tapons
quelques instructions pour le v´ erifier :
> print(vect)
[1] 1 2 3 4 5 6 7 8 9 10
Précédent

- 259/701

Suivant