Chapitre 6. Programmation en R
233
constructeur de la nouvelle classe lm1 h´ eritant directement de la classe existante
lm. Leur intention est toutefois d’orienter le d´ eveloppement dans la langue
d’origine du R, ` a savoir l’anglais, dans un but de partager ´ eventuellement leur
travail avec la communaut´ e des utilisateurs R.
1 lm1 <- function (...) {
2
obj <- lm (...)
3
if ( ncol ( model . frame ( obj )) >2) stop ("plus d’une
4
variable ind´ ependante" )
5
class ( obj ) <- c(" lm1 " , class ( obj )) # Ou c("lm1","lm")
6
obj
7 }
Appliquons cela aux mˆ emes variables que pr´ ec´ edemment.
> reg <- lm1(y∼x)
> reg
Call:
lm(formula = ..1)
Coefficients:
(Intercept)
x
1.0646
-0.2186
D´ ej` a, nous pouvons constater la notion d’h´ eritage. En effet, l’objet s’affiche
diff´ eremment de la sortie de la fonction print.default() alors qu’aucune m´ ethode print.lm1 n’est d´ efinie. Cela s’explique par le fait que le syst` eme R dispose d´ ej` a de la m´ ethode print.lm() (d´ efinie dans le package syst` eme stats)
et que l’objet reg h´ erite des m´ ethodes de la classe lm. Pour v´ erifier que cet
objet h´ erite bien de cette classe, il y a plusieurs possibilit´ es dont la plus simple
est de visualiser le contenu de l’attribut class via la fonction class(). Un
d´ eveloppeur pr´ ef` erera peut-ˆ etre la fonction inherits(), plus directe dans son
utilisation.
> class(reg)
[1] "lm1" "lm"
> inherits(reg,"lm")
[1] TRUE
> stats:::print.lm(reg)
Call:
lm(formula = ..1)
Coefficients:
(Intercept)
x
1.0646
-0.2186
La ligne 4 (que nous ne commenterons pas ici) dans la fonction lm1() teste
si la formule est bien celle d’un mod` ele de r´ egression simple. Voyons ce qu’il en
est sur un exemple.
Précédent

- 266/701

Suivant