Anda di halaman 1dari 81

R pour les dbutants e

Emmanuel Paradis

Institut des Sciences de lEvolution Universit Montpellier II e F-34095 Montpellier cdex 05 e France E-mail : paradis@isem.univ-montp2.fr

Je remercie Julien Claude, Christophe Declercq, Elodie Gazave, Friedrich Leisch, Louis Luangkesron, Franois Pinard et Mathieu Ros pour leurs comc mentaires et suggestions sur des versions prcdentes de ce document. Jexe e prime galement ma reconnaissance a tous les membres du R Development e ` Core Team pour leurs eorts considrables dans le dveloppement de R et dans e e lanimation de la liste de discussion lectronique r-help . Merci galement e e aux utilisateurs de R qui par leurs questions ou commentaires mont aid a e ` crire R pour les dbutants. Mention spciale a Jorge Ahumada pour la trae e e ` duction en espagnol.

c 2002, 2005, Emmanuel Paradis (12 septembre 2005) Permission est accorde de copier et distribuer ce document, en partie ou en e totalit, dans nimporte quelle langue, sur nimporte quel support, a condition e ` que la notice c ci-dessus soit incluse dans toutes les copies. Permission est accorde de traduire ce document, en partie ou en totalit, dans nimporte e e quelle langue, a condition que la notice c ci-dessus soit incluse. `

Table des mati`res e

1 Prambule e 2 Quelques concepts avant de dmarrer e 2.1 Comment R travaille . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Crer, lister et eacer les objets en mmoire . . . . . . . . . . . e e 2.3 Laide en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Les 3.1 3.2 3.3 3.4

1 3 3 5 7

donnes avec R e 10 Les objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Lire des donnes dans un chier . . . . . . . . . . . . . . . . . . 12 e Enregistrer les donnes . . . . . . . . . . . . . . . . . . . . . . . 16 e Gnrer des donnes . . . . . . . . . . . . . . . . . . . . . . . . 17 e e e 3.4.1 Squences rguli`res . . . . . . . . . . . . . . . . . . . . 17 e e e 3.4.2 Squences alatoires . . . . . . . . . . . . . . . . . . . . 19 e e 3.5 Manipuler les objets . . . . . . . . . . . . . . . . . . . . . . . . 20 3.5.1 Cration dobjets . . . . . . . . . . . . . . . . . . . . . . 20 e 3.5.2 Conversion dobjets . . . . . . . . . . . . . . . . . . . . 25 3.5.3 Les oprateurs . . . . . . . . . . . . . . . . . . . . . . . 27 e 3.5.4 Accder aux valeurs dun objet : le syst`me dindexation 28 e e 3.5.5 Accder aux valeurs dun objet avec les noms . . . . . . 31 e 3.5.6 Lditeur de donnes . . . . . . . . . . . . . . . . . . . . 32 e e 3.5.7 Calcul arithmtique et fonctions simples . . . . . . . . . 33 e 3.5.8 Calcul matriciel . . . . . . . . . . . . . . . . . . . . . . . 35 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 38 38 39 42 43 45 46 51 59 59 60 62 65

4 Les graphiques avec R 4.1 Gestion des graphiques . . . . . . . . . . . . . 4.1.1 Ouvrir plusieurs dispositifs graphiques 4.1.2 Partitionner un graphique . . . . . . . 4.2 Les fonctions graphiques . . . . . . . . . . . . 4.3 Les fonctions graphiques secondaires . . . . . 4.4 Les param`tres graphiques . . . . . . . . . . . e 4.5 Un exemple concret . . . . . . . . . . . . . . 4.6 Les packages grid et lattice . . . . . . . . . . . 5 Les 5.1 5.2 5.3 5.4 analyses statistiques avec R Un exemple simple danalyse de Les formules . . . . . . . . . . . Les fonctions gnriques . . . . e e Les packages . . . . . . . . . . variance . . . . . . . . . . . . . . . . . . . . . . . . . . .

6 Programmer avec R en pratique 6.1 Boucles et vectorisation . . . . . . . . . . . . . . . . . . . . . . 6.2 Ecrire un programme en R . . . . . . . . . . . . . . . . . . . . 6.3 Ecrire ses fonctions . . . . . . . . . . . . . . . . . . . . . . . . . 7 Littrature sur R e

69 69 71 72 76

Prambule e

Le but du prsent document est de fournir un point de dpart pour les e e novices intresss par R. Jai fait le choix dinsister sur la comprhension du e e e fonctionnement de R, bien s r dans le but dune utilisation de niveau dbutant u e plutt quexpert. Les possibilits oertes par R tant tr`s vastes, il est utile o e e e pour le dbutant dassimiler certaines notions et concepts an dvoluer plus e e aisment par la suite. Jai essay de simplier au maximum les explications e e pour les rendre accessibles a tous, tout en donnant les dtails utiles, parfois ` e sous forme de tableaux. R est un syst`me danalyse statistique et graphique cr par Ross Ihaka e ee 1 . R est a la fois un logiciel et un langage quali de ` e et Robert Gentleman dialecte du langage S cr par AT&T Bell Laboratories. S est disponible sous ee la forme du logiciel S-PLUS commercialis par la compagnie Insightful 2 . Il y e a des dirences importantes dans la conception de R et celle de S : ceux qui e veulent en savoir plus sur ce point peuvent se reporter a larticle de Ihaka & ` 3 dont une copie est galement distribue avec e e Gentleman (1996) ou au R-FAQ R. R est distribu librement sous les termes de la GNU General Public Lie 4 ; son dveloppement et sa distribution sont assurs par plusieurs stacence e e tisticiens rassembls dans le R Development Core Team. e R est disponible sous plusieurs formes : le code (crit principalement en C e et certaines routines en Fortran), surtout pour les machines Unix et Linux, ou des excutables prcompils pour Windows, Linux et Macintosh. Les chiers e e e pour installer R, a partir du code ou des excutables, sont distribus a partir du ` e e ` site internet du Comprehensive R Archive Network (CRAN) 5 o` se trouvent u aussi les instructions a suivre pour linstallation sur chaque syst`me. En ce ` e qui concerne les distributions de Linux (Debian, . . .), les excutables sont e gnralement disponibles pour les versions les plus rcentes ; consultez le site e e e du CRAN si besoin. R comporte de nombreuses fonctions pour les analyses statistiques et les graphiques ; ceux-ci sont visualiss immdiatement dans une fentre propre et e e e peuvent tre exports sous divers formats (jpg, png, bmp, ps, pdf, emf, pictex, e e xg ; les formats disponibles peuvent dpendre du syst`me dexploitation). e e Les rsultats des analyses statistiques sont achs a lcran, certains rsultats e e ` e e partiels (valeurs de P, coecients de rgression, rsidus, . . .) peuvent tre e e e sauvs a part, exports dans un chier ou utiliss dans des analyses ultrieures. e ` e e e
Ihaka R. & Gentleman R. 1996. R: a language for data analysis and graphics. Journal of Computational and Graphical Statistics 5 : 299314. 2 voir http://www.insightful.com/products/splus/default.asp pour plus dinformation 3 http://cran.r-project.org/doc/FAQ/R-FAQ.html 4 pour plus dinfos : http://www.gnu.org/ 5 http://cran.r-project.org/
1

Le langage R permet, par exemple, de programmer des boucles qui vont analyser successivement dirents jeux de donnes. Il est aussi possible de come e biner dans le mme programme direntes fonctions statistiques pour raliser e e e des analyses plus complexes. Les utilisateurs de R peuvent bncier des nome e breux programmes crits pour S et disponibles sur internet 6 , la plupart de ces e programmes tant directement utilisables avec R. e De prime abord, R peut sembler trop complexe pour une utilisation par un non-spcialiste. Ce nest pas forcment le cas. En fait, R privilgie la exie e e bilit. Alors quun logiciel classique achera directement les rsultats dune e e analyse, avec R ces rsultats sont stocks dans un objet, si bien quune anae e lyse peut tre faite sans quaucun rsultat ne soit ach. Lutilisateur peut e e e tre dconcert par ceci, mais cette facilit se rv`le extrmement utile. En e e e e e e e eet, lutilisateur peut alors extraire uniquement la partie des rsultats qui e lintresse. Par exemple, si lon doit faire une srie de 20 rgressions et que e e e lon veuille comparer les coecients des direntes rgressions, R pourra ae e cher uniquement les coecients estims : les rsultats tiendront donc sur une e e ligne, alors quun logiciel plus classique pourra ouvrir 20 fentres de rsultats. e e On verra dautres exemples illustrant la exibilit dun syst`me comme R e e vis-`-vis des logiciels classiques. a

par exemple : http://stat.cmu.edu/S/

Quelques concepts avant de dmarrer e

Une fois R install sur votre ordinateur, il sut de lancer lexcutable e e correspondant pour dmarrer le programme. Lattente de commandes (par e dfaut le symbole >) apparait alors indiquant que R est prt a excuter e e ` e les commandes. Sous Windows en utilisant le programme Rgui.exe, certaines commandes (acc`s a laide, ouverture de chiers, . . .) peuvent tre excutes e ` e e e par les menus. Lutilisateur novice a alors toutes les chances de se demander Je fais quoi maintenant ? Il est en eet tr`s utile davoir quelques ides e e sur le fonctionnement de R lorsquon lutilise pour la premi`re fois : cest ce e que nous allons voir maintenant. Nous allons dans un premier temps voir schmatiquement comment R trae vaille. Ensuite nous dcrirons loprateur assigner qui permet de crer e e e des objets, puis comment grer les objets en mmoire, et nalement comment e e utiliser laide en ligne qui est extrmement utile dans une utilisation courante. e

2.1

Comment R travaille

Le fait que R soit un langage peut erayer plus dun utilisateur potentiel pensant Je ne sais pas programmer . Cela ne devrait pas tre le cas pour e deux raisons. Dabord, R est un langage interprt et non compil, cest-`-dire ee e a que les commandes tapes au clavier sont directement excutes sans quil soit e e e besoin de construire un programme complet comme cela est le cas pour la plupart des langages informatiques (C, Fortran, Pascal, . . .). Ensuite, la syntaxe de R est tr`s simple et intuitive. Par exemple, une e rgression linaire pourra tre faite avec la commande lm(y ~ x). Avec R, e e e une fonction, pour tre excute, scrit toujours avec des parenth`ses, mme e e e e e e si elles ne contiennent rien (par exemple ls()). Si lutilisateur tape le nom de la fonction sans parenth`ses, R achera le contenu des instructions de e cette fonction. Dans la suite de ce document, les noms des fonctions sont gnralement crits avec des parenth`ses pour les distinguer des autres objets e e e e sauf si le texte indique clairement quil sagit dune fonction. Quand R est utilis, les variables, les donnes, les fonctions, les rsultats, e e e etc, sont stocks dans la mmoire de lordinateur sous forme dobjets qui e e ont chacun un nom. Lutilisateur va agir sur ces objets avec des oprateurs e (arithmtiques, logiques, de comparaison, . . .) et des fonctions (qui sont ellese mmes des objets). e Lutilisation des oprateurs est relativement intuitive, on en verra les dtails e e e e e plus loin (p. 27). Une fonction de R peut tre schmatise comme suit :

arguments options

fonction arguments par dfaut e

=rsultat e

Les arguments peuvent tre des objets ( donnes , formules, expressions, e e . . .) dont certains peuvent tre dnis par dfaut dans la fonction ; ces valeurs e e e par dfaut peuvent tre modies par lutilisateur avec les options. Une fonce e e tion de R peut ne ncessiter aucun argument de la part de lutilisateur : soit e tous les arguments sont dnis par dfaut (et peuvent tre changs avec les e e e e options), ou soit aucun argument nest dni. On verra plus en dtail lutilisae e e tion et la construction des fonctions (p. 72). La prsente description est pour le moment susante pour comprendre comment R op`re. e Toutes les actions de R sont eectues sur les objets prsents dans la e e mmoire vive de lordinateur : aucun chier temporaire nest utilis (Fig. 1). e e Les lectures et critures de chiers sont utilises pour la lecture et lenregistree e ment des donnes et des rsultats (graphiques, . . .). Lutilisateur excute des e e e fonctions par lintermdiaire de commandes. Les rsultats sont achs direce e e tement a lcran, ou stocks dans un objet, ou encore crits sur le disque (en ` e e e particulier pour les graphiques). Les rsultats tant eux-mmes des objets, ils e e e peuvent tre considrs comme des donnes et tre analyss a leur tour. Les e ee e e e ` chiers de donnes peuvent tre lus sur le disque de lordinateur local ou sur e e un serveur distant via internet.

clavier souris

commandes

- fonctions et oprateurs  e ? objets donnes e

.../library/base/ /stast/ /graphics/ ...

biblioth`que e de fonctions

  XXX

XX

chiers de donnes e

cran e

  )  

internet X z X

6 ? objets rsultats e

PS

JPEG

...

Mmoire vive e

Disque dur

Fig. 1 Une vue schmatique du fonctionnement de R. e Les fonctions disponibles sont stockes dans une biblioth`que localises e e e e sur le disque dans le rpertoire R HOME/library (R HOME dsignant le e rpertoire o` R est install). Ce rpertoire contient des packages de fonctions, e u e e eux-mmes prsents sur le disque sous forme de rpertoires. Le package nomm e e e e base est en quelque sorte le cur de R et contient les fonctions de base du lan4

gage, en particulier pour la lecture et la manipulation des donnes. Chaque pae ckage a un rpertoire nomm R avec un chier qui a pour nom celui du package e e (par exemple, pour base, ce sera le chier R HOME/library/base/R/base). Ce chier contient les fonctions du package. Une des commandes les plus simples consiste a taper le nom dun objet ` pour acher son contenu. Par exemple, si un objet n contient la valeur 10 : > n [1] 10 Le chire 1 entre crochets indique que lachage commence au premier lment de n. Cette commande est une utilisation implicite de la fonction print ee et lexemple ci-dessus est identique a print(n) (dans certaines situations, la ` fonction print doit tre utilise de faon explicite, par exemple au sein dune e e c fonction ou dune boucle). Le nom dun objet doit obligatoirement commencer par une lettre (AZ et az) et peut comporter des lettres, des chires (09), des points (.) et des espaces souligns ( ). Il faut savoir aussi que R distingue, pour les noms des e objets, les majuscules des minuscules, cest-`-dire que x et X pourront servir a a ` nommer des objets distincts (mme sous Windows). e

2.2

Crer, lister et eacer les objets en mmoire e e

Un objet peut tre cr avec loprateur assigner qui scrit avec une e ee e e `che compose dun signe moins accol a un crochet, ce symbole pouvant tre e e e` e orient dans un sens ou dans lautre : e > n > n [1] > 5 > n [1] > x > X > x [1] > X [1] <- 15 15 -> n 5 <- 1 <- 10 1 10

Si lobjet existe dj`, sa valeur prcdente est eace (la modication nafea e e e fecte que les objets en mmoire vive, pas les donnes sur le disque). La valeur e e ainsi donne peut tre le rsultat dune opration et/ou dune fonction : e e e e > n <- 10 + 2 > n 5

[1] 12 > n <- 3 + rnorm(1) > n [1] 2.208807 La fonction rnorm(1) gn`re une variable alatoire normale de moyenne e e e zro et variance unit (p. 19). On peut simplement taper une expression sans e e assigner sa valeur a un objet, le rsultat est alors ach a lcran mais nest ` e e` e pas stock en mmoire : e e > (10 + 2) * 5 [1] 60 Dans nos exemples, on omettra lassignement si cela nest pas ncessaire a e ` la comprhension. e La fonction ls permet dacher une liste simple des objets en mmoire, e cest-`-dire que seuls les noms des objets sont achs. a e > name <- "Carmen"; n1 <- 10; n2 <- 100; m <- 0.5 > ls() [1] "m" "n1" "n2" "name" Notons lusage du point-virgule pour sparer des commandes distinctes e sur la mme ligne. Si lon veut lister uniquement les objets qui contiennent un e caract`re donn dans leur nom, on utilisera alors loption pattern (qui peut e e sabrger avec pat) : e > ls(pat = "m") [1] "m" "name" Pour restreindre la liste aux objets dont le nom commence par le caract`re en e question : > ls(pat = "^m") [1] "m" La fonction ls.str ache des dtails sur les objets en mmoire : e e > ls.str() m : num 0.5 n1 : num 10 n2 : num 100 name : chr "Carmen" Loption pattern peut galement tre utilise comme avec ls. Une autre e e e option utile de ls.str est max.level qui spcie le niveau de dtails de lafe e chage des objets composites. Par dfaut, ls.str ache les dtails de tous e e les objets contenus en mmoire, y compris les colonnes des jeux de donnes, e e matrices et listes, ce qui peut faire un achage tr`s long. On vite dacher e e tous les dtails avec loption max.level = -1 : e 6

> M <- data.frame(n1, n2, m) > ls.str(pat = "M") M : data.frame: 1 obs. of $ n1: num 10 $ n2: num 100 $ m : num 0.5 > ls.str(pat="M", max.level=-1) M : data.frame: 1 obs. of

3 variables:

3 variables:

Pour eacer des objets de la mmoire, on utilise la fonction rm : rm(x) pour e eacer lobjet x, rm(x, y) pour eacer les objets x et y, rm(list=ls()) pour eacer tous les objets en mmoire ; on pourra ensuite utiliser les mmes options e e cites pour ls() pour eacer slectivement certains objets : rm(list=ls(pat e e = "^m")).

2.3

Laide en ligne

Laide en ligne de R est extrment utile pour lutilisation des fonctions. e Laide est disponible directement pour une fonction donne, par exemple : e > ?lm achera, dans R, la page daide pour la fonction lm() (linear model). Les commandes help(lm) et help("lm") auront le mme eet. Cest cette derni`re e e quil faut utiliser pour accder a laide avec des caract`res non-conventionnels : e ` e > ?* Error: syntax error > help("*") Arithmetic Arithmetic Operators ... Lappel de laide ouvre une page (le comportement exact dpend du syst`me e e dexploitation) avec sur la premi`re ligne des informations gnrales dont le e e e nom du package o` se trouvent la (ou les) fonction(s) ou les oprateurs docuu e ments. Ensuite vient un titre suivi de paragraphes qui chacun apporte une e information bien prcise. e Description: br`ve description. e Usage: pour une fonction donne le nom avec tous ses arguments et les vene tuelles options (et les valeurs par dfaut correspondantes) ; pour un e oprateur donne lusage typique. e Arguments: pour une fonction dtaille chacun des arguments. e Details: description dtaille. e e 7

package:base

R Documentation

Value: le cas chant, le type dobjet retourn par la fonction ou loprateur. e e e e See Also: autres rubriques daide proches ou similaires a celle documente. ` e Examples: des exemples qui gnralement peuvent tre excuts sans ouvrir e e e e e laide avec la fonction example. Pour un dbutant, il est conseill de regarder le paragraphe Examples. En e e gnral, il est utile de lire attentivement le paragraphe Arguments. Dautres e e paragraphes peuvent tre rencontrs, tel Note, References ou Author(s). e e Par dfaut, la fonction help ne recherche que dans les packages chargs en e e mmoire. Loption try.all.packages, dont le dfaut est FALSE, permet de e e chercher dans tous les packages si sa valeur est TRUE : > help("bs") No documentation for bs in specified packages and libraries: you could try help.search("bs") > help("bs", try.all.packages = TRUE) Help for topic bs is not in any loaded package but can be found in the following packages: Package splines Library /usr/lib/R/library

Notez que dans ce cas la page daide de la fonction bs nest pas ouverte. Lutilisateur peut ouvrir des pages daide dun package non charg en mmoire e e en utilisant loption package : > help("bs", package = "splines") bs package:splines B-Spline Basis for Polynomial Splines Description: Generate the B-spline basis matrix for a polynomial spline. ... On peut ouvrir laide au format html (qui sera lu avec Netscape, par exemple) en tapant : > help.start() Une recherche par mots-clefs est possible avec cette aide html. La rubrique See Also contient ici des liens hypertextes vers les pages daide des autres fonctions. La recherche par mots-clefs est galement possible depuis R avec e la fonction help.search. Cette derni`re recherche un th`me, spci par une e e e e cha de caract`re, dans les pages daide de tous les packages installs. Par ne e e exemple, help.search("tree") achera une liste des fonctions dont les pages 8

R Documentation

daide mentionnent tree . Notez que si certains packages ont t installs ee e rcemment, il peut tre utile de rafra e e chir la base de donnes utilise par e e help.search en utilisant loption rebuild (help.search("tree", rebuild = TRUE)). La fonction apropos trouve les fonctions qui contiennent dans leur nom la cha de caract`re passe en argument ; seuls les packages chargs en mmoire ne e e e e sont cherchs : e > apropos(help) [1] "help" [4] "help.start"

".helpForCall" "help.search"

Les donnes avec R e

3.1

Les objects

Nous avons vu que R manipule des objets : ceux-ci sont caractriss bien e e s r par leur nom et leur contenu, mais aussi par des attributs qui vont spcier u e le type de donnes reprsent par un objet. An de comprendre lutilit de ces e e e e attributs, considrons une variable qui prendrait les valeurs 1, 2 ou 3 : une telle e variable peut reprsenter une variable enti`re (par exemple, le nombre dufs e e dans un nid), ou le codage dune variable catgorique (par exemple, le sexe e dans certaines populations de crustacs : mle, femelle ou hermaphrodite). e a Il est clair que le traitement statistique de cette variable ne sera pas le mme dans les deux cas : avec R, les attributs de lobjet donnent linformation e ncessaire. Plus techniquement, et plus gnralement, laction dune fonction e e e sur un objet va dpendre des attributs de celui-ci. e Les objets ont tous deux attributs intrins`ques : le mode et la longueur. e Le mode est le type des lments dun objet ; il en existe quatre principaux : ee numrique, caract`re, complexe7 , et logique (FALSE ou TRUE). Dautres modes e e existent qui ne reprsentent pas des donnes, par exemple fonction ou exprese e sion. La longueur est le nombre dlments de lobjet. Pour conna le mode ee tre et la longueur dun objet on peut utiliser, respectivement, les fonctions mode et length : > x <- 1 > mode(x) [1] "numeric" > length(x) [1] 1 > A <- "Gomphotherium"; compar <- TRUE; z <- 1i > mode(A); mode(compar); mode(z) [1] "character" [1] "logical" [1] "complex" Quelque soit le mode, les valeurs manquantes sont reprsentes par NA e e (not available). Une valeur numrique tr`s grande peut tre spcie avec une e e e e e notation exponentielle : > N <- 2.1e23 > N [1] 2.1e+23
7

Le mode complexe ne sera pas discut dans ce document. e

10

R reprsente correctement des valeurs numriques qui ne sont pas nies, e e telles que avec Inf et -Inf, ou des valeurs qui ne sont pas des nombres avec NaN (not a number ). > x <- 5/0 > x [1] Inf > exp(x) [1] Inf > exp(-x) [1] 0 > x - x [1] NaN Une valeur de mode caract`re est donc entre entre des guillemets doubles e e ". Il est possible dinclure ce dernier caract`re dans la valeur sil suit un antie slash \. Lensemble des deux caract`res \" sera trait de faon spcique par e e c e certaines fonctions telle que cat pour lachage a lcran, ou write.table ` e pour crire sur le disque (p. 16, loption qmethod de cette fonction). e > x <- "Double quotes \" delimitate Rs strings." > x [1] "Double quotes \" delimitate Rs strings." > cat(x) Double quotes " delimitate Rs strings. Une autre possibilit est de dlimiter les variables de mode caract`re avec e e e des guillemets simples () ; dans ce cas il nest pas ncessaire dchapper e e les guillemets doubles avec des antislash (mais les guillemets simples doivent ltre !) : e > x <- Double quotes " delimitate R\s strings. > x [1] "Double quotes \" delimitate Rs strings."\ Le tableau suivant donne un aperu des objets reprsentant des donnes. c e e

11

objet

modes

plusieurs modes possibles dans le mme objet ? e logique logique logique logique Non Non Non Non Oui Non Oui

vecteur facteur tableau matrice tableau de donnes e ts liste

numrique, caract`re, complexe ou e e numrique ou caract`re e e numrique, caract`re, complexe ou e e numrique, caract`re, complexe ou e e numrique, caract`re, complexe ou e e

numrique, caract`re, complexe ou logique e e numrique, caract`re, complexe, logique, e e fonction, expression, . . .

Un vecteur est une variable dans le sens gnralement admis. Un facteur e e est une variable catgorique. Un tableau (array) poss`de k dimensions, une e e ` matrice tant un cas particulier de tableau avec k = 2. A noter que les lments e ee dun tableau ou dune matrice sont tous du mme mode. Un tableau de donnes e e (data frame) est compos de un ou plusieurs vecteurs et/ou facteurs ayant tous e la mme longueur mais pouvant tre de modes dirents. Un ts est un e e e jeu de donnes de type sries temporelles (time series) et comporte donc des e e attributs supplmentaires comme la frquence et les dates. Enn, une liste e e peut contenir nimporte quel type dobjet, y compris des listes ! Pour un vecteur, le mode et la longueur susent pour dcrire les donnes. e e Pour les autres objets, dautres informations sont ncessaires et celles-ci sont e donnes par les attributs dits non-intrins`ques. Parmi ces attributs, citons dim e e qui correspond au nombre de dimensions dun objet. Par exemple, une matrice compose de 2 lignes et 2 colonnes aura pour dim le couple de valeurs [2, 2] ; e par contre sa longueur sera de 4.

3.2

Lire des donnes dans un chier e

Pour les lectures et critures dans les chiers, R utilise le rpertoire de trae e vail. Pour conna ce rpertoire on peut utiliser la commande getwd() (get tre e working directory), et on peut le modier avec, par exemple, setwd("C:/data") ou setwd("/home/paradis/R"). Il est ncessaire de prciser le chemin dacc`s e e e au chier sil nest pas dans le rpertoire de travail. 8 e R peut lire des donnes stockes dans des chiers texte (ASCII) a laide e e ` des fonctions suivantes : read.table (qui a plusieurs variantes, cf. ci-dessous), scan et read.fwf. R peut galement lire des chiers dans dautres formats e (Excel, SAS, SPSS, . . .) et accder a des bases de donnes de type SQL, mais e ` e les fonctions ncessaires ne sont pas dans le package base. Ces fonctionnalits e e
Sous Windows, il est pratique de crer un raccourci de Rgui.exe, puis diter ses proprits e e e e et modier le rpertoire dans le champ Dmarrer en : sous longlet Raccourci : ce e e rpertoire sera ensuite le rpertoire de travail en dmarrant R depuis ce raccourci. e e e
8

12

sont tr`s utiles pour une utilisation un peu plus avance de R, mais on se e e limitera ici a la lecture de chiers au format ASCII. ` La fonction read.table a pour eet de crer un tableau de donnes et est e e donc le moyen principal pour lire des chiers de donnes. Par exemple, si on e a un chier nomm data.dat, la commande : e > mydata <- read.table("data.dat") crera un tableau de donnes nomm mydata, et les variables, par dfaut e e e e nommes V1, V2 . . ., pourront tre accdes individuellement par mydata$V1, e e e e mydata$V2, . . ., ou par mydata ["V1"], mydata["V2"], . . ., ou encore par mydata[, 1], mydata[, 2], . . .9 Il y a plusieurs options dont voici les valeurs par dfaut (cest-`-dire celles utilises par R si elles sont omises par lutilisae a e teur) et les dtails dans le tableau qui suit : e read.table(file, header = FALSE, sep = "", quote = "\"", dec = ".", row.names, col.names, as.is = FALSE, na.strings = "NA", colClasses = NA, nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#")

file

header sep quote dec row.names

col.names as.is

na.strings colClasses nrows

le nom du chier (entre "" ou une variable de mode caract`re), e ventuellement avec son chemin dacc`s (le symbole \ est interdit et e e doit tre remplac par /, mme sous Windows), ou un acc`s distant e e e e a un chier de type URL (http://...) ` une valeur logique (FALSE ou TRUE) indicant si le chier contient les e noms des variables sur la 1`re ligne le sparateur de champ dans le chier, par exemple sep="\t" si cest e une tabulation les caract`res utiliss pour citer les variables de mode caract`re e e e le caract`re utilis pour les dcimales e e e un vecteur contenant les noms des lignes qui peut tre un vecteur de e mode character, ou le numro (ou le nom) dune variable du chier e (par dfaut : 1, 2, 3, . . .) e un vecteur contenant les noms des variables (par dfaut : V1, V2, e V3, . . .) contrle la conversion des variables caract`res en facteur (si FALSE) o e ou les conserve en caract`res (TRUE) ; as.is peut tre un vecteur e e logique, numrique ou caract`re prcisant les variables conserves e e e e en caract`re e indique la valeur des donnes manquantes (sera converti en NA) e un vecteur de caract`res donnant les classes a attribuer aux colonnes e ` le nombre maximum de lignes a lire (les valeurs ngatives sont ` e ignores) e

Il y a toutefois une dirence : mydata$V1 et mydata[, 1] sont des vecteurs alors que e mydata["V1"] est un tableau de donnes. On verra plus loin (p. 20) des dtails sur la manie e pulation des objets.

13

skip check.names fill strip.white blank.lines.skip comment.char

le nombre de lignes a sauter avant de commencer la lecture des ` donnes e si TRUE, vrie que les noms des variables sont valides pour R e si TRUE et que les lignes nont pas tous le mme nombre de variables, e des blancs sont ajouts e (conditionnel a sep) si TRUE, eace les espaces (= blancs) avant et ` apr`s les variables de mode caract`re e e si TRUE, ignore les lignes blanches un caract`re qui dnit des commentaires dans le chier de donnes, e e e la lecture des donnes passant a la ligne suivante (pour dsactiver e ` e cet option, utiliser comment.char = "")

Les variantes de read.table sont utiles car elles ont des valeurs par dfaut e direntes : e read.csv(file, header = TRUE, sep = ",", quote="\"", dec=".", fill = TRUE, ...) read.csv2(file, header = TRUE, sep = ";", quote="\"", dec=",", fill = TRUE, ...) read.delim(file, header = TRUE, sep = "\t", quote="\"", dec=".", fill = TRUE, ...) read.delim2(file, header = TRUE, sep = "\t", quote="\"", dec=",", fill = TRUE, ...) La fonction scan est plus exible que read.table. Une dirence est quil e est possible de spcier le mode des variables, par exemple : e > mydata <- scan("data.dat", what = list("", 0, 0)) lira dans le chier data.dat trois variables, la premi`re de mode caract`re et e e les deux suivantes de mode numrique. Une autre distinction importante est e que scan() peut tre utilise pour crer dirents objets, vecteurs, matrices, e e e e tableaux de donnes, listes, . . . Dans lexemple ci-dessus, mydata est une liste e de trois vecteurs. Par dfaut, cest-`-dire si what est omis, scan() cre un e a e vecteur numrique. Si les donnes lues ne correspondent pas au(x) mode(s) e e attendu(s) (par dfaut ou spcis par what), un message derreur est retourn. e e e e Les options sont les suivantes. scan(file = "", what = double(0), nmax = -1, n = -1, sep = "", quote = if (sep=="\n") "" else "\"", dec = ".", skip = 0, nlines = 0, na.strings = "NA", flush = FALSE, fill = FALSE, strip.white = FALSE, quiet = FALSE, blank.lines.skip = TRUE, multi.line = TRUE, comment.char = "", allowEscapes = TRUE)

14

file

what nmax n sep quote dec skip nlines na.string flush

fill strip.white quiet blank.lines.skip multi.line comment.char

allowEscapes

le nom du chier (entre ""), ventuellement avec son chemin dacc`s e e (le symbole \ est interdit et doit tre remplac par /, mme sous e e e Windows), ou un acc`s distant a un chier de type URL (http://...) ; e ` si file="", les donnes sont entres au clavier (lentre tant tere e e e mine par une ligne blanche) e indique le(s) mode(s) des donnes lues (numrique par dfaut) e e e le nombre de donnes a lire, ou, si what est une liste, le nombre de e ` lignes lues (par dfaut, scan lit jusqu` la n du chier) e a le nombre de donnes a lire (par dfaut, pas de limite) e ` e le sparateur de champ dans le chier e les caract`res utiliss pour citer les variables de mode caract`re e e e le caract`re utilis pour les dcimales e e e le nombre de lignes a sauter avant de commencer la lecture des ` donnes e le nombre de lignes a lire ` indique la valeur des donnes manquantes (sera converti en NA) e si TRUE, scan va a la ligne suivante une fois que le nombre de co` lonnes est atteint (permet dajouter des commentaires dans le chier de donnes) e si TRUE et que les lignes nont pas tous le mme nombre de variables, e des blancs sont ajouts e (conditionnel a sep) si TRUE, eace les espaces (= blancs) avant et ` apr`s les variables de mode character e si FALSE, scan ache une ligne indiquant quels champs ont t lus e e si TRUE, ignore les lignes blanches si what est une liste, prcise si les variables du mme individu sont e e sur une seule ligne dans le chier (FALSE) un caract`re qui dnit des commentaires dans le chier de donnes, e e e la lecture des donnes passant a la ligne suivante (par dfaut les e ` e commentaires ne sont pas permis) spcie si les caract`res chapps (par ex. \t) doivent tre interprts e e e e e e e (le dfaut) ou laisss tels-quels e e

La fonction read.fwf sert a lire dans un chier o` les donnes sont dans ` u e un format a largeur xe (xed width format) : ` e read.fwf(file, widths, header = FALSE, sep = "\t", as.is = FALSE, skip = 0, row.names, col.names, n = -1, buffersize = 2000, ...) Les options sont les mmes que pour read.table() sauf e widths qui spcie la largeur des champs (buffersize e est le nombre maximum de lignes lues en mme temps). e Par exemple, si on a un chier nomm data.txt dont le e contenu est indiqu ci-contre, on pourra lire les donnes e e avec la commande suivante : > mydata <- read.fwf("data.txt", widths=c(1, 4, 3)) > mydata V1 V2 V3 1 A 1.50 1.2 15 A1.501.2 A1.551.3 B1.601.4 B1.651.5 C1.701.6 C1.751.7

2 3 4 5 6

A B B C C

1.55 1.60 1.65 1.70 1.75

1.3 1.4 1.5 1.6 1.7

3.3

Enregistrer les donnes e

La fonction write.table crit dans un chier un objet, typiquement un e tableau de donnes mais cela peut tr`s bien tre un autre type dobjet (vecteur, e e e matrice, . . .). Les arguments et options sont : write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ", eol = "\n", na = "NA", dec = ".", row.names = TRUE, col.names = TRUE, qmethod = c("escape", "double"))

x file append quote

sep eol na dec row.names col.names qmethod

le nom de lobjet a crire `e le nom du chier (par dfaut lobjet est ach a lcran) e e` e si TRUE ajoute les donnes sans eacer celles ventuellement existantes dans e e le chier une variable logique ou un vecteur numrique : si TRUE les variables de e mode caract`re et les facteurs sont crits entre "", sinon le vecteur indique e e les numros des variables a crire entre "" (dans les deux cas les noms des e `e variables sont crits entre "" mais pas si quote = FALSE) e le sparateur de champ dans le chier e le caract`re imprim a la n de chaque ligne ("\n" correspond a un retoure e` ` charriot) indique le caract`re utilis pour les donnes manquantes e e e le caract`re utilis pour les dcimales e e e une variable logique indiquant si les noms des lignes doivent tre crits e e dans le chier idem pour les noms des colonnes spcie, si quote=TRUE, comment sont traites les guillemets doubles " ine e cluses dans les variables de mode caract`re : si "escape" (ou "e", le dfaut) e e chaque " est remplace par \", si "d" chaque " est remplace par "" e e

Pour crire de faon plus simple un objet dans un chier, on peut utiliser e c la commande write(x, file="data.txt") o` x est le nom de lobjet (qui u peut tre un vecteur, une matrice ou un tableau). Il y a deux options : nc (ou e ncol) qui dnit le nombre de colonnes dans le chier (par dfaut nc=1 si x est e e de mode caract`re, nc=5 pour les autres modes), et append (un logique) pour e ajouter les donnes sans eacer celles ventuellement dj` existantes dans le e e ea chier (TRUE) ou les eacer si le chier existe dj` (FALSE, le dfaut). ea e Pour enregistrer des objets, cette fois de nimporte quel type, on utilisera la commande save(x, y, z, file="xyz.RData"). Pour faciliter lchange e de chiers entre machines et syst`mes dexploitation, on peut utiliser loption e ascii=TRUE. Les donnes (qui sont alors nommes workspace dans le jargon de e e 16

R) peuvent ultrieurement tre charges en mmoire avec load("xyz.RData"). e e e e La fonction save.image est un raccourci pour save(list=ls (all=TRUE), file=".RData").

3.4
3.4.1

Gnrer des donnes e e e


Squences rguli`res e e e

Une squence rguli`re de nombres entiers, par exemple de 1 a 30, peut e e e ` tre gnre par : e e ee > x <- 1:30 On a ainsi un vecteur x avec 30 lments. Cet oprateur : est prioritaire sur ee e les oprations arithmtiques au sein dune expression : e e > 1:10-1 [1] 0 1 2 3 4 5 6 7 8 9 > 1:(10-1) [1] 1 2 3 4 5 6 7 8 9 La fonction seq peut gnrer des squences de nombres rels de la mani`re e e e e e suivante : > seq(1, 5, 0.5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 o` le premier nombre indique le dbut de la squence, le second la n, et le u e e troisi`me lincrment utilis dans la progression de la squence. On peut aussi e e e e utiliser : > seq(length=9, from=1, to=5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 On peut aussi taper directement les valeurs dsires en utilisant la fonction e e c: > c(1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 Il est aussi possible si lon veut taper des donnes au clavier dutiliser la e fonction scan avec tout simplement les options par dfaut : e > z <- scan() 1: 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 10: Read 9 items > z [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 17

La fonction rep cre un vecteur qui aura tous ses lments identiques : e ee > rep(1, 30) [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 La fonction sequence va crer une suite de squences de nombres entiers e e qui chacune se termine par les nombres donns comme arguments a cette e ` fonction : > sequence(4:5) [1] 1 2 3 4 1 2 3 4 5 > sequence(c(10,5)) [1] 1 2 3 4 5 6

9 10

La fonction gl (generate levels) est tr`s utile car elle gn`re des sries e e e e rguli`res dans un facteur. Cette fonction sutilise ainsi gl(k, n) o` k est le e e u nombre de niveaux (ou classes) du facteur, et n est le nombre de rplications e pour chaque niveau. Deux options peuvent tre utilises : length pour spcier e e e le nombre de donnes produites, et labels pour indiquer les noms des niveaux e du facteur. Exemples : > gl(3, 5) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 > gl(3, 5, length=30) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 > gl(2, 6, label=c("Male", "Female")) [1] Male Male Male Male Male Male [7] Female Female Female Female Female Female Levels: Male Female > gl(2, 10) [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 Levels: 1 2 > gl(2, 1, length=20) [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 Levels: 1 2 > gl(2, 2, length=20) [1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 Levels: 1 2 Enn, expand.grid() sert a crer un tableau de donnes avec toutes les ` e e combinaisons des vecteurs ou facteurs donns comme arguments : e > expand.grid(h=c(60,80), w=c(100, 300), sex=c("Male", "Female")) h w sex 1 60 100 Male 18

2 3 4 5 6 7 8

80 60 80 60 80 60 80

100 300 300 100 100 300 300

Male Male Male Female Female Female Female

3.4.2

Squences alatoires e e

Il est utile en statistique de pouvoir gnrer des donnes alatoires, et R e e e e peut le faire pour un grand nombre de fonctions de densit de probabilit. Ces e e fonctions sont de la forme rfunc (n, p1, p2, ...), o` func indique la loi de u probabilit, n le nombre de donnes gnres et p1, p2, . . . sont les valeurs des e e e ee param`tres de la loi. Le tableau suivant donne les dtails pour chaque loi, et e e les ventuelles valeurs par dfaut (si aucune valeur par dfaut nest indique, e e e e cest que le param`tre doit tre spci). e e e e loi Gauss (normale) exponentielle gamma Poisson Weibull Cauchy beta Student (t) FisherSnedecor (F ) Pearson (2 ) binomiale multinomiale gomtrique e e hypergomtrique e e logistique lognormale binomiale ngative e uniforme statistiques de Wilcoxon fonction rnorm(n, mean=0, sd=1) rexp(n, rate=1) rgamma(n, shape, scale=1) rpois(n, lambda) rweibull(n, shape, scale=1) rcauchy(n, location=0, scale=1) rbeta(n, shape1, shape2) rt(n, df) rf(n, df1, df2) rchisq(n, df) rbinom(n, size, prob) rmultinom(n, size, prob) rgeom(n, prob) rhyper(nn, m, n, k) rlogis(n, location=0, scale=1) rlnorm(n, meanlog=0, sdlog=1) rnbinom(n, size, prob) runif(n, min=0, max=1) rwilcox(nn, m, n), rsignrank(nn, n)

La plupart de ces fonctions ont des compagnes obtenues en remplaant c la lettre r par d, p ou q pour obtenir, dans lordre, la densit de probabilit e e (dfunc (x, ...)), la densit de probabilit cumule (pfunc (x, ...)), et la e e e valeur de quantile (qfunc (p, ...), avec 0 < p < 1). Les deux derni`res sries de fonctions peuvent tre utilises pour trouver e e e e les valeurs critiques ou les valeurs de P de tests statistiques. Par exemple, les 19

valeurs critiques au seuil de 5% pour un test bilatral suivant une loi normale e sont : > qnorm(0.025) [1] -1.959964 > qnorm(0.975) [1] 1.959964 Pour la version unilatrale de ce test, qnorm(0.05) ou 1 - qnorm(0.95) sera e utilis dpendant de la forme de lhypoth`se alternative. e e e 2 = 3.84 avec ddl = 1, est : La valeur de P dun test, disons > 1 - pchisq(3.84, 1) [1] 0.05004352

3.5
3.5.1

Manipuler les objets


Cration dobjets e

On a vu direntes faons de crer des objets en utilisant loprateur assie c e e gner ; le mode et le type de lobjet ainsi cr sont gnralement dtermins de ee e e e e faon implicite. Il est possible de crer un objet en prcisant de faon explicite c e e c son mode, sa longueur, son type, etc. Cette approche est intressante dans e lide de manipuler les objets. On peut, par exemple, crer un vecteur vide e e puis modier successivement ses lments, ce qui est beaucoup plus ecace ee que de rassembler ces lments avec c(). On utilisera alors lindexation comme ee on le verra plus loin (p. 28). Il peut tre aussi extrment pratique de crer des objets a partir dautres e e e ` objets. Par exemple, si lon veut ajuster une srie de mod`les, il sera commode e e de mettre les formules correspondantes dans une liste puis dextraire successivement chaque lment de celle-ci qui sera ensuite insr dans la fonction ee ee lm. ` A ce point de notre apprentissage de R, lintrt daborder les fonctionee nalits qui suivent nest pas seulement pratique mais aussi didactique. La e construction explicite dobjets permet de mieux comprendre leur structure et dapprofondir certaines notions vues prcdemment. e e Vecteur. La fonction vector, qui a deux arguments mode et length, va servir a crer un vecteur dont la valeur des lments sera fonction du mode ` e ee spci : 0 si numrique, FALSE si logique, ou "" si caract`re. Les fonce e e e tions suivantes ont exactement le mme eet et ont pour seul argument e la longueur du vecteur cr : numeric(), logical(), et character(). ee Facteur. Un facteur inclue non seulement les valeurs de la variable catgorique e correspondante mais aussi les dirents niveaux possibles de cette vae riable (mme ceux qui ne sont pas reprsents dans les donnes). La e e e e fonction factor cre un facteur avec les options suivantes : e

20

factor(x, levels = sort(unique(x), na.last = TRUE), labels = levels, exclude = NA, ordered = is.ordered(x)) levels spcie quels sont les niveaux possibles du facteur (par dfaut e e les valeurs uniques du vecteur x), labels dnit les noms des niveaux, e exclude les valeurs de x a ne pas inclure dans les niveaux, et ordered ` est un argument logique spciant si les niveaux du facteur sont ore donns. Rappelons que x est de mode numrique ou caract`re. En guise e e e dexemples : > factor(1:3) [1] 1 2 3 Levels: 1 2 3 > factor(1:3, levels=1:5) [1] 1 2 3 Levels: 1 2 3 4 5 > factor(1:3, labels=c("A", "B", "C")) [1] A B C Levels: A B C > factor(1:5, exclude=4) [1] 1 2 3 NA 5 Levels: 1 2 3 5 La fonction levels sert a extraire les niveaux possibles dun facteur : ` > ff <- factor(c(2, 4), levels=2:5) > ff [1] 2 4 Levels: 2 3 4 5 > levels(ff) [1] "2" "3" "4" "5" Matrice. Une matrice est en fait un vecteur qui poss`de un argument supple e mentaire (dim) qui est lui-mme un vecteur numrique de longueur 2 et e e qui dnit les nombres de lignes et de colonnes de la matrice. Une matrice e peut tre cre avec la fonction matrix : e ee matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) Loption byrow indique si les valeurs donnes par data doivent remplir e successivement les colonnes (le dfaut) ou les lignes (si TRUE). Loption e dimnames permet de donner des noms aux lignes et colonnes. > matrix(data=5, nr=2, nc=2) [,1] [,2] [1,] 5 5 [2,] 5 5 > matrix(1:6, 2, 3) [,1] [,2] [,3] 21

[1,] 1 3 5 [2,] 2 4 6 > matrix(1:6, 2, 3, byrow=TRUE) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 Une autre faon de crer une matrice est de donner les valeurs voulues c e a lattribut dim dun vecteur (attribut qui est initialement NULL) : ` > x <- 1:15 > x [1] 1 2 3 4 5 > dim(x) NULL > dim(x) <- c(5, 3) > x [,1] [,2] [,3] [1,] 1 6 11 [2,] 2 7 12 [3,] 3 8 13 [4,] 4 9 14 [5,] 5 10 15

9 10 11 12 13 14 15

Tableau de donnes. On a vu quun tableau de donnes est cr de faon e e ee c implicite par la fonction read.table ; on peut galement crer un tae e bleau de donnes avec la fonction data.frame. Les vecteurs inclus dans e le tableau doivent tre de mme longueur, ou si un de ces lments est e e ee plus court il est alors recycl un nombre entier de fois : e > x <- 1:4; n <- 10; M <- c(10, 35); y <- 2:4 > data.frame(x, n) x n 1 1 10 2 2 10 3 3 10 4 4 10 > data.frame(x, M) x M 1 1 10 2 2 35 3 3 10 4 4 35 > data.frame(x, y) Error in data.frame(x, y) : arguments imply differing number of rows: 4, 3 Si un facteur est inclus dans le tableau de donnes, il doit tre de mme e e e longueur que le(s) vecteur(s). Il est possible de changer les noms des 22

colonnes avec, par exemple, data.frame(A1=x, A2=n). On peut aussi donner des noms aux lignes avec loption row.names qui doit, bien s r, u tre un vecteur de mode caract`re et de longueur gale au nombre de e e e lignes du tableau de donnes. Enn, notons que les tableaux de donnes e e ont un attribut dim de la mme faon que les matrices. e c Liste. Une liste est cre de la mme faon quun tableau de donnes avec la ee e c e fonction list. Il ny a aucune contrainte sur les objets qui y sont inclus. ` A la dirence de data.frame(), les noms des objets ne sont pas repris e par dfaut ; en reprenant les vecteurs x et y de lexemple prcdant : e e e > L1 <- list(x, y); L2 <- list(A=x, B=y) > L1 [[1]] [1] 1 2 3 4 [[2]] [1] 2 3 4 > L2 $A [1] 1 2 3 4 $B [1] 2 3 4 > names(L1) NULL > names(L2) [1] "A" "B" Srie temporelle. La fonction ts va crer un objet de classe "ts" a partir e e ` dun vecteur (srie temporelle simple) ou dune matrice (srie temporelle e e multiple), et des options qui caractrisent la srie. Les options, avec les e e valeurs par dfaut, sont : e ts(data = NA, start = 1, end = numeric(0), frequency = 1, deltat = 1, ts.eps = getOption("ts.eps"), class, names) data start end frequency deltat un vecteur ou une matrice e le temps de la 1`re observation, soit un nombre, ou soit un vecteur de deux entiers (cf. les exemples ci-dessous) le temps de la derni`re observation spci de la mme e e e e faon que start c nombre dobservations par unit de temps e la fraction de la priode dchantillonnage entre observae e tions successives (ex. 1/12 pour des donnes mensuelles) ; e seulement un de frequency ou deltat doit tre prcis e e e 23

ts.eps

class names

tolrance pour la comparaison de sries. Les frquences e e e sont considres gales si leur dirence est infrieure a ee e e e ` ts.eps classe a donner a lobjet ; le dfaut est "ts" pour une ` ` e srie simple, et c("mts", "ts") pour une srie multiple e e un vecteur de mode caract`re avec les noms des sries e e individuelles dans le cas dune srie multiple ; par dfaut e e les noms des colonnes de data, ou Series 1, Series 2, etc.

Quelques exemples de cration de sries temporelles avec ts : e e > ts(1:10, start = 1959) Time Series: Start = 1959 End = 1968 Frequency = 1 [1] 1 2 3 4 5 6 7 8 9 10 > ts(1:47, frequency = 12, start = c(1959, 2)) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1959 1 2 3 4 5 6 7 8 9 10 11 1960 12 13 14 15 16 17 18 19 20 21 22 23 1961 24 25 26 27 28 29 30 31 32 33 34 35 1962 36 37 38 39 40 41 42 43 44 45 46 47 > ts(1:10, frequency = 4, start = c(1959, 2)) Qtr1 Qtr2 Qtr3 Qtr4 1959 1 2 3 1960 4 5 6 7 1961 8 9 10 > ts(matrix(rpois(36, 5), 12, 3), start=c(1961, 1), frequency=12) Series 1 Series 2 Series 3 Jan 1961 8 5 4 Feb 1961 6 6 9 Mar 1961 2 3 3 Apr 1961 8 5 4 May 1961 4 9 3 Jun 1961 4 6 13 Jul 1961 4 2 6 Aug 1961 11 6 4 Sep 1961 6 5 7 Oct 1961 6 5 7 Nov 1961 5 5 7 Dec 1961 8 5 2 Expression. Les objets de mode expression ont un rle fondamental dans R. o Une expression est une suite de caract`res qui ont un sens pour R. Toutes e les commandes valides sont des expressions. Lorsque la commande est 24

tape directement au clavier, elle est alors value par R qui lexcute e e e e si elle est valide. Dans bien des circonstances, il est utile de construire une expression sans lvaluer : cest le rle de la fonction expression. e o On pourra, bien s r, valuer lexpression ultrieurement avec eval(). u e e > x <- 3; y <- 2.5; z <- 1 > exp1 <- expression(x / (y + exp(z))) > exp1 expression(x/(y + exp(z))) > eval(exp1) [1] 0.5749019 Les expressions servent aussi, entre autres, a inclure des quations sur les ` e e ee ` graphiques (p. 44). Une expression peut tre cre a partir dune variable de mode caract`re. Certaines fonctions utilisent des expressions en tant e quargument, par exemple D qui calcule des drives partielles : e e > D(exp1, "x") 1/(y + exp(z)) > D(exp1, "y") -x/(y + exp(z))^2 > D(exp1, "z") -x * exp(z)/(y + exp(z))^2 3.5.2 Conversion dobjets

Le lecteur aura s rement ralis que les dirences entre certains objets u e e e sont parfois minces ; il est donc logique de pouvoir convertir un objet en un autre en changeant certains de ces attributs. Une telle conversion sera eectue e avec une fonction du genre as.something . R (version 2.1.0) comporte, dans les packages base et utils, 98 de ces fonctions, aussi nous ne rentrerons pas dans les dtails ici. e Le rsultat dune conversion dpend bien s r des attributs de lobjet cone e u verti. En gnral, la conversion suit des r`gles intuitives. Pour les conversions e e e de modes, le tableau suivant rsume la situation. e

25

Conversion en numrique e

Fonction as.numeric

R`gles e FALSE TRUE "1", "2", . . . "A", . . . 0 autres nombres "FALSE", "F" "TRUE", "T" autres caract`res e 1, 2, . . . FALSE TRUE 0 1 1, 2, . . . NA FALSE TRUE FALSE TRUE NA "1", "2", . . . "FALSE" "TRUE"

logique

as.logical

caract`re e

as.character

Il existe des fonctions pour convertir les types dobjets (as.matrix, as.ts, as.data.frame, as.expression, . . .). Ces fonctions vont agir sur des attributs autres que le mode pour la conversion. L` encore les rsultats sont a e gnralement intuitifs. Une situation frquemment rencontre est la convere e e e sion de facteur en vecteur numrique. Dans ce cas, R convertit avec le codage e numrique des niveaux du facteur : e > fac <- factor(c(1, 10)) > fac [1] 1 10 Levels: 1 10 > as.numeric(fac) [1] 1 2 Cela est logique si lon consid`re un facteur de mode caract`re : e e > fac2 <- factor(c("Male", "Female")) > fac2 [1] Male Female Levels: Female Male > as.numeric(fac2) [1] 2 1 Notez que le rsultat nest pas NA comme on aurait pu sattendre dapr`s e e le tableau ci-dessus. Pour convertir un facteur de mode numrique en conservant les niveaux e tels quils sont spcis, on convertira dabord en caract`re puis en numrique. e e e e > as.numeric(as.character(fac)) [1] 1 10 Cette procdure est tr`s utile si, dans un chier, une variable numrique e e e contient (pour une raison ou une autre) galement des valeurs non-numriques. e e On a vu que read.table() dans ce genre de situation va, par dfaut, lire cette e colonne comme un facteur. 26

3.5.3

Les oprateurs e

Nous avons vu prcdemment quil y a trois principaux types doprateurs e e e dans R10 . En voici la liste.

Arithmtique e + * / ^ %% %/% addition soustraction multiplication division puissance modulo division enti`re e < > <= >= == !=

Oprateurs e Comparaison infrieur a e ` suprieur a e ` infrieur ou gal a e e ` suprieur ou gal a e e ` gal e dirent e

Logique ! x x & y x && y x | y x || y xor(x, y) NON logique ET logique idem OU logique idem OU exclusif

Les oprateurs arithmtiques ou de comparaison agissent sur deux lments e e ee (x + y, a < b). Les oprateurs arithmtiques agissent non seulement sur les e e variables de mode numrique ou complexe, mais aussi sur celles de mode e logique ; dans ce dernier cas, les valeurs logiques sont converties en valeurs numriques. Les oprateurs de comparaison peuvent sappliquer a nimporte e e ` quel mode : ils retournent une ou plusieurs valeurs logiques. Les oprateurs logiques sappliquent a un (!) ou deux objets de mode loe ` gique et retournent une (ou plusieurs) valeurs logiques. Les oprateurs ET e et OU existent sous deux formes : la forme simple opre sur chaque e lment des objets et retourne autant de valeurs logiques que de comparaiee sons eectues ; la forme double opre sur le premier lment des objets. e e ee On utilisera loprateur ET pour spcier une ingalit du type 0 < x < e e e e 1 qui sera code ainsi : 0 < x & x < 1. Lexpression 0 < x < 1 est valide mais e ne donnera pas le rsultat escompt : les deux oprateurs de cette expression e e e tant identiques, ils seront excuts successivement de la gauche vers la droite. e e e Lopration 0 < x sera dabord ralise retournant une valeur logique qui sera e e e ensuite compare a 1 (TRUE ou FALSE < 1) : dans ce cas la valeur logique sera e ` convertie implicitement en numrique (1 ou 0 < 1). e > x <- 0.5 > 0 < x < 1 [1] FALSE Les oprateurs de comparaison op`rent sur chaque lment des deux obe e ee jets qui sont compars (en recyclant ventuellement les valeurs si lun est plus e e court), et retournent donc un objet de mme taille. Pour eectuer une compae raison globale de deux objets, deux fonctions sont disponibles : identical et all.equal.
Les caract`res suivants sont en fait aussi des oprateurs pour R : $, @, [, [[, :, ?, <-, <<-, e e =, ::. Un tableau des oprateurs dcrivant les r`gles de priorit peut tre trouv avec ?Syntax. e e e e e e
10

27

> x <- 1:3; y <- 1:3 > x == y [1] TRUE TRUE TRUE > identical(x, y) [1] TRUE > all.equal(x, y) [1] TRUE identical compare la reprsentation interne des donnes et retourne TRUE e e si les objets sont strictement identiques, sinon FALSE. all.equal compare lgalit approximative des deux objets, et retourne TRUE ou ache un e e rsum des dirences. Cette derni`re fonction prend en compte lapproximae e e e tion des calculs dans la comparaison des valeurs numriques. La comparaison e de valeurs numriques sur un ordinateur est parfois surprenante ! e > 0.9 == (1 - 0.1) [1] TRUE > identical(0.9, 1 - 0.1) [1] TRUE > all.equal(0.9, 1 - 0.1) [1] TRUE > 0.9 == (1.1 - 0.2) [1] FALSE > identical(0.9, 1.1 - 0.2) [1] FALSE > all.equal(0.9, 1.1 - 0.2) [1] TRUE > all.equal(0.9, 1.1 - 0.2, tolerance = 1e-16) [1] "Mean relative difference: 1.233581e-16" 3.5.4 Accder aux valeurs dun objet : le syst`me dindexation e e

Lindexation est un moyen ecace et exible daccder de faon slective e c e aux lments dun objet ; elle peut tre numrique ou logique. Pour accder a, ee e e e ` `me valeur dun vecteur x, on tape x[3] qui peut tre utilis e par exemple, la 3 e e aussi bien pour extraire ou changer cette valeur : > x <- 1:5 > x[3] [1] 3 > x[3] <- 20 > x [1] 1 2 20

Lindice lui-mme peut tre un vecteur de mode numrique : e e e > i <- c(1, 3) 28

> x[i] [1] 1 20 Si x est une matrice ou un tableau de donnes, on accdera a la valeur de e e ` `me colonne par x[i, j]. Pour accder a toutes les valeurs e la ligne et j e ` dune ligne ou dune colonne donne, il sut simplement domettre lindice e appropri (sans oublier la virgule !) : e
e i`me

> x <- matrix(1:6, 2, 3) > x [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > x[, 3] <- 21:22 > x [,1] [,2] [,3] [1,] 1 3 21 [2,] 2 4 22 > x[, 3] [1] 21 22 Vous avez certainement not que le dernier rsultat est un vecteur et non e e une matrice. Par dfaut, R retourne un objet de la plus petite dimension e possible. Ceci peut tre modi avec loption drop dont le dfaut est TRUE : e e e > x[, 3, drop = FALSE] [,1] [1,] 21 [2,] 22 Ce syst`me dindexation se gnralise facilement pour les tableaux, on aura e e e alors autant dindices que le tableau a de dimensions (par exemple pour une tableau a trois dimensions : x[i, j, k], x[, , 3],x[, , 3, drop = FALSE], ` etc). Il peut tre utile de se souvenir que lindexation se fait a laide de crochets, e ` les parenth`ses tant rserves pour les arguments dune fonction : e e e e > x(1) Error: couldnt find function "x" Lindexation peut aussi tre utilise pour supprimer une ou plusieurs lignes e e ou colonnes en utilisant des valeurs ngatives. Par exemple, x[-1, ] supprie `re ligne, ou x[-c(1, 15), ] fera de mme avec les 1`re et 15`me e e e mera la 1 e lignes. En utilisant la matrice dnies ci-dessus : e > x[, -1] [,1] [,2] [1,] 3 21 29

[2,] 4 22 > x[, -(1:2)] [1] 21 22 > x[, -(1:2), drop = FALSE] [,1] [1,] 21 [2,] 22 Pour les vecteurs, matrices et tableaux il est possible daccder aux valeurs e de ces lments a laide dune expression de comparaison en guise dindice : ee ` > x <- 1:10 > x[x >= 5] > x [1] 1 2 > x[x == 1] > x [1] 25 2 <- 20 3 4 20 20 20 20 20 20 <- 25 3 4 20 20 20 20 20 20

Une utilisation pratique de cette indexation logique est, par exemple, la possibilit de slectionner les lments pairs dune variable enti`re : e e ee e > x <- rpois(40, lambda=5) > x [1] 5 9 4 7 7 6 4 5 11 3 [21] 4 6 6 5 4 5 3 4 3 3 > x[x %% 2 == 0] [1] 4 6 4 2 2 2 4 6 6 4 4 8 4 2 4

5 3

7 7

1 7

5 3

3 8

9 1

2 4

2 2

5 1

2 4

Ce syst`me dindexation utilise donc des valeurs logiques retournes dans e e ce cas par les oprateurs de comparaison. Ces valeurs logiques peuvent tre e e calcules au pralable, elles seront ventuellement recycles : e e e e > x <- 1:40 > s <- c(FALSE, TRUE) > x[s] [1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 Lindexation logique peut galement tre utilise avec des tableaux de e e e donnes, mais avec la dicult que les direntes colonnes peuvent tre de e e e e modes dirents. e Pour les listes, lacc`s aux dirents lments (qui peuvent tre nimporte e e ee e quel objet) se fait avec des crochets simples ou doubles : la dirence tant e e quavec les crochets simples une liste est retourne, alors quavec les croe e chets doubles extraient lobjet de la liste. Par exemple, si le 3 `me lment ee `me lment de ce vecteur peut tre accd e dune liste est un vecteur, le i ee e e e avec my.list[[3]][i], ou bien avec my.list[[3]][i, j, k] sil sagit dun tableau a trois dimensions, etc. Une autre dirence est que my.list[1:2] ` e retournera une liste avec le premier et le second lment de la liste originale, ee alors que my.list[[1:2]] ne donnera pas le rsultat escompt. e e 30

3.5.5

Accder aux valeurs dun objet avec les noms e

Les noms sont les tiquettes des lments dun objet, et sont donc de mode e ee caract`re. Ce sont gnralement des attributs optionnels ; il en existe plusieurs e e e sortes (names, colnames, rownames, dimnames). Les noms dun vecteur sont stocks dans un vecteur de mme longueur, et e e peuvent accds avec la fonction names. e e > x <- 1:3 > names(x) NULL > names(x) <- c("a", "b", "c") > x a b c 1 2 3 > names(x) [1] "a" "b" "c" > names(x) <- NULL > x [1] 1 2 3 Pour les matrices et les tableaux de donnes, colnames and rownames sont e les tiquettes des lignes et des colonnes. Elles peuvent tre accdes avec leurs e e e e fonctions respectives, ou avec dimnames qui retourne une liste avec les deux vecteurs. > > > > X <- matrix(1:4, 2) rownames(X) <- c("a", "b") colnames(X) <- c("c", "d") X c d a 1 3 b 2 4 > dimnames(X) [[1]] [1] "a" "b" [[2]] [1] "c" "d" Pour les tableaux, les noms des dimensions peuvent tre accds avec e e e dimnames. > A <- array(1:8, dim = c(2, 2, 2)) > A , , 1

31

[,1] [,2] [1,] 1 3 [2,] 2 4 , , 2 [,1] [,2] 5 7 6 8

[1,] [2,]

> dimnames(A) <- list(c("a", "b"), c("c", "d"), c("e", "f")) > A , , e c d a 1 3 b 2 4 , , f c d a 5 7 b 6 8 Si les lments dun objet ont des noms, ils peuvent tre extraits en les ee e utilisant en guise dindices. En fait, cela doit tre appel` subdivision (subsete e ting) plutt quextraction car les attributs de lobjet dorigine sont conservs. o e Par exemple, si un tableau de donnes DF comporte les variables x, y, et z, la e commande DF["x"] donnera un tableau de donnes avec juste x ; DF[c("x", e "y")] donnera un tableau de donnes avec les deux variables correspondantes. e Ce syst`me marche aussi avec une liste si ses lments ont des noms. e ee Comme on le constate, lindex ainsi utilis est un vecteur de mode cae ract`re. Comme pour les vecteurs logiques ou numriques vus prcdemment, e e e e ce vecteur peut tre tabli au pralable et ensuite insr pour lextraction. e e e ee Pour extraire un vecteur ou un facteur dun tableau de donnes on utilisera e loprateur $ (par exemple DF$x). Cela marche galement avec les listes. e e 3.5.6 Lditeur de donnes e e

Il est possible dutiliser un diteur graphique de style tableur pour diter un e e objet contenant des donnes. Par exemple, si on a une matrice X, la commande e data.entry(X) ouvrira lditeur graphique et lon pourra modier les valeurs e en cliquant sur les cases correspondantes ou encore ajouter des colonnes ou des lignes. La fonction data.entry modie directement lobjet pass en argument e sans avoir a assigner son rsultat. Par contre la fonction de retourne une ` e

32

liste compose des objets passs en arguments et ventuellement modis. e e e e Ce rsultat est ach a lcran par dfaut mais, comme pour la plupart des e e` e e fonctions, peut tre assign dans un objet. e e Les dtails de lutilisation de cet diteur de donnes dpendent du syst`me e e e e e dexploitation. 3.5.7 Calcul arithmtique et fonctions simples e

Il existe de nombreuses fonctions dans R pour manipuler les donnes. La e plus simple, on la vue plus haut, est c qui concat`ne les objets numrs entre e e ee parenth`ses. Par exemple : e > c(1:5, seq(10, 11, 0.2)) [1] 1.0 2.0 3.0 4.0 5.0 10.0 10.2 10.4 10.6 10.8 11.0 Les vecteurs peuvent tre manipuls selon des expressions arithmtiques e e e classiques : > x > y > z > z [1] <- 1:4 <- rep(1, 4) <- x + y 2 3 4 5

Des vecteurs de longueurs direntes peuvent tre additionns, dans ce cas e e e le vecteur le plus court est recycl. Exemples : e > x <- 1:4 > y <- 1:2 > z <- x + y > z [1] 2 4 4 6 > x <- 1:3 > y <- 1:2 > z <- x + y Warning message: longer object length is not a multiple of shorter object length in: x + y > z [1] 2 4 4 On notera que R a retourn un message davertissement et non pas un e message derreur, lopration a donc t eectue. Si lon veut ajouter (ou e ee e multiplier) la mme valeur a tous les lments dun vecteur : e ` ee > x <- 1:4 > a <- 10 33

> z <- a * x > z [1] 10 20 30 40 Les fonctions disponibles dans R pour les manipulations de donnes sont e trop nombeuses pour tre numres ici. On trouve toutes les fonctions mae e ee thmatiques de base (log, exp, log10, log2, sin, cos, tan, asin, acos, atan, e abs, sqrt, . . .), des fonctions spciales (gamma, digamma, beta, besselI, . . .), e ainsi que diverses fonctions utiles en statistiques. Quelques-unes sont indiques e dans le tableau qui suit.

sum(x) prod(x) max(x) min(x) which.max(x) which.min(x) range(x) length(x) mean(x) median(x) var(x) ou cov(x)

cor(x) var(x, y) ou cov(x, y) cor(x, y)

somme des lments de x ee produit des lments de x ee maximum des lments de x ee minimum des lments de x ee retourne lindice du maximum des lments de x ee retourne lindice du minimum des lments de x ee idem que c(min(x), max(x)) nombre dlments dans x ee moyenne des lments de x ee mdiane des lments de x e ee variance des lments de x (calcule sur n 1) ; si x est une ee e matrice ou un tableau de donnes, la matrice de variancee covariance est calcule e matrice de corrlation si x est une matrice ou un tableau de e donnes (1 si x est un vecteur) e covariance entre x et y, ou entre les colonnes de x et de y si ce sont des matrices ou des tableaux de donnes e corrlation linaire entre x et y, ou matrice de corrlations si e e e ce sont des matrices ou des tableaux de donnes e

Ces fonctions retournent une valeur simple (donc un vecteur de longueur 1), sauf range qui retourne un vecteur de longueur 2, et var, cov et cor qui peuvent retourner une matrice. Les fonctions suivantes retournent des rsultats e plus complexes.

round(x, n) rev(x) sort(x) rank(x) log(x, base) scale(x)

pmin(x,y,...)

arrondit les lments de x a n chires apr`s la virgule ee ` e inverse lordre des lments de x ee trie les lments de x dans lordre ascendant ; pour trier dans lordre ee descendant : rev(sort(x)) rangs des lments de x ee calcule le logarithme a base base de x ` si x est une matrice, centre et rduit les donnes ; pour centrer unie e quement ajouter loption center=FALSE, pour rduire uniquement e scale=FALSE (par dfaut center=TRUE, scale=TRUE) e e un vecteur dont le i`me lment est le minimum entre x[i], y[i], . . . ee

34

pmax(x,y,...) cumsum(x) cumprod(x) cummin(x) cummax(x) match(x, y) which(x == a)

choose(n, k) na.omit(x) na.fail(x) unique(x) table(x) table(x, y) subset(x, ...)

sample(x, size)

idem pour le maximum e un vecteur dont le i`me lment est la somme de x[1] a x[i] ee ` idem pour le produit idem pour le minimum idem pour le maximum retourne un vecteur de mme longueur que x contenant les lments e ee de x qui sont dans y (NA sinon) retourne un vecteur des indices de x pour lesquels lopration de come paraison est vraie (TRUE), dans cet exemple les valeurs de i telles que x[i] == a (largument de cette fonction doit tre une variable de e mode logique) calcule les combinaisons de k vnements parmi n rptitions = e e e e n!/[(n k)!k!] supprime les observations avec donnes manquantes (NA) (supprime la e ligne correspondante si x est une matrice ou un tableau de donnes) e retourne un message derreur si x contient au moins un NA si x est un vecteur ou un tableau de donnes, retourne un objet simie laire mais avec les lments dupliqus supprims ee e e retourne un tableau des eectifs des direntes valeurs de x (typiquee ment pour des entiers ou des facteurs) tableau de contingence de x et y retourne une slection de x en fonction de crit`res (..., typiquee e ment des comparaisons : x$V1 < 10) ; si x est un tableau de donnes, e loption select permet de prciser les variables a slectionner (ou a e ` e ` liminer a laide du signe moins) e ` r-chantillonne alatoirement et sans remise size lments dans ee e ee le vecteur x, pour r-chantillonner avec remise on ajoute loption ee replace = TRUE

3.5.8

Calcul matriciel

R ore des facilits pour le calcul et la manipulation de matrices. Les e fonctions rbind et cbind juxtaposent des matrices en conservant les lignes ou les colonnes, respectivement : > m1 <- matrix(1, nr = 2, nc = 2) > m2 <- matrix(2, nr = 2, nc = 2) > rbind(m1, m2) [,1] [,2] [1,] 1 1 [2,] 1 1 [3,] 2 2 [4,] 2 2 > cbind(m1, m2) [,1] [,2] [,3] [,4] [1,] 1 1 2 2 [2,] 1 1 2 2 35

Loprateur pour le produit de deux matrices est %*%. Par exemple, en e reprenant les deux matrices m1 et m2 ci-dessus : > rbind(m1, m2) %*% cbind(m1, m2) [,1] [,2] [,3] [,4] [1,] 2 2 4 4 [2,] 2 2 4 4 [3,] 4 4 8 8 [4,] 4 4 8 8 > cbind(m1, m2) %*% rbind(m1, m2) [,1] [,2] [1,] 10 10 [2,] 10 10 La transposition dune matrice se fait avec la fonction t ; cette fonction marche aussi avec un tableau de donnes. e La fonction diag sert a extraire, modier la diagonale dune matrice, ou ` encore a construire une matrice diagonale. ` > diag(m1) [1] 1 1 > diag(rbind(m1, m2) %*% cbind(m1, m2)) [1] 2 2 8 8 > diag(m1) <- 10 > m1 [,1] [,2] [1,] 10 1 [2,] 1 10 > diag(3) [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 > v <- c(10, 20, 30) > diag(v) [,1] [,2] [,3] [1,] 10 0 0 [2,] 0 20 0 [3,] 0 0 30 > diag(2.1, nr = 3, nc = 5) [,1] [,2] [,3] [,4] [,5] [1,] 2.1 0.0 0.0 0 0 [2,] 0.0 2.1 0.0 0 0 [3,] 0.0 0.0 2.1 0 0 R a galement des fonctions spciales pour le calcul matriciel. Citons solve e e pour linversion dune matrice, qr pour la dcomposition, eigen pour le cale 36

cul des valeurs et vecteurs propres, et svd pour la dcomposition en valeurs e singuli`res. e

37

Les graphiques avec R

R ore une varit de graphiques remarquable. Pour avoir une petite ide ee e des possibilits oertes, il sut de taper la commande demo(graphics) ou e demo(persp). Il nest pas possible ici de dtailler toutes les possibilits ainsi e e oertes, en particulier chaque fonction graphique a beaucoup doptions qui rendent la production de graphiques extrment exible. e Le fonctionnement des fonctions graphiques dvie substantiellement du e schma dress au dbut de ce document. Notamment, le rsultat dune fonce e e e 11 mais est envoy a un e ` tion graphique ne peut pas tre assign a un objet e e ` priphrique graphique (graphical device). Un priphrique graphique est mae e e e trialis par une fentre graphique ou un chier. e e e Il existe deux sortes de fonctions graphiques : principales qui crent un e nouveau graphe, et secondaires qui ajoutent des lments a un graphe dj` ee ` ea existant. Les graphes sont produits en fonction de param`tres graphiques qui e sont dnis par dfaut et peuvent tre modis avec la fonction par. e e e e Nous allons dans un premier temps voir comment grer les graphiques, e ensuite nous dtaillerons les fonctions et param`tres graphiques. Nous verrons e e un exemple concret de lutilisation de ces fonctionnalits pour la production de e graphes. Enn, nous verrons les packages grid et lattice dont le fonctionnement est dirent de celui rsum ci-dessus. e e e

4.1
4.1.1

Gestion des graphiques


Ouvrir plusieurs dispositifs graphiques

Lorsquune fonction graphique est excute, si aucun priphrique grae e e e phique nest alors ouvert, R ouvrira une fentre graphique et y achera le e graphe. Un priphrique graphique peut tre ouvert avec une fonction approe e e prie. La liste des priphriques graphiques disponibles dpend du syst`me e e e e e dexploitation. Les fentres graphiques sont nommes X11 sous Unix/Linux et e e windows sous Windows. Dans tous les cas, on peut ouvrir une fentre avec e la commande x11() qui marche mme sous Windows grce a un alias vers la e a ` commande windows(). Un priphrique graphique de type chier sera ouvert e e avec une fonction qui dpend du format : postscript(), pdf(), png(), . . . e Pour conna tre la liste des priphriques disponibles pour votre installation, e e tapez ?device. Le dernier priphrique ouvert devient le priphrique graphique actif sur e e e e lequel seront achs les graphes suivants. La fonction dev.list() ache la e liste des priphriques ouverts : e e
Il y a quelques exceptions notables : hist() et barplot() produisent galement des e rsultats numriques sous forme de liste ou de matrice. e e
11

38

> x11(); x11(); pdf() > dev.list() X11 X11 pdf 2 3 4 Les chires qui sachent correspondent aux numros des priphriques qui e e e doivent tre utiliss si lon veut changer le priphrique actif. Pour conna e e e e tre le priphrique actif : e e > dev.cur() pdf 4 et pour changer le priphrique actif : e e > dev.set(3) X11 3 La fonction dev.off() ferme un priphrique graphique : par dfaut le e e e priphrique actif est ferm sinon cest celui dont le numro est donn comme e e e e e argument a la fonction. R ache le numro du priphrique actif : ` e e e > dev.off(2) X11 3 > dev.off() pdf 4 Deux spcicits de la version Windows de R sont a signaler : la fonction e e ` win.metafile qui acc`de a un chier au format Windows Metale, et un e ` menu History ach lorsque la fentre graphique est slectionne qui e e e e permet denregistrer tous les graphes produits au cours dune session (par dfaut lenregistrement nest pas activ, lutilisateur lactive en cliquant sur e e Enregistrer dans ce menu). 4.1.2 Partitionner un graphique

La fonction split.screen partitionne le graphique actif. Par exemple : > split.screen(c(1, 2)) va diviser le graphique en deux parties quon slectionnera avec screen(1) e ou screen(2) ; erase.screen() eace le graphe derni`rement dessin. Une e e partie peut tre elle-mme divise avec split.screen() donnant la possibilit e e e e de faire des arrangements complexes. Ces fonctions sont incompatibles avec dautres (tel layout ou coplot) et ne doivent pas tre utilises avec des priphriques graphiques multiples. Leur e e e e 39

utilisation doit donc tre limite par exemple pour lexploration visuelle de e e donnes. e La fonction layout partitionne le graphique actif en plusieurs parties sur lesquelles sont achs les graphes successivement ; son argument principal e est une matrice avec des valeurs enti`res qui indiquent les numros des souse e fentres. Par exemple, si lon veut diviser la fentre en quatre parties gales : e e e > layout(matrix(1:4, 2, 2)) On pourra bien s r crer cette matrice au pralable ce qui permettra de u e e mieux voir comment est divis le graphique : e > mat <- matrix(1:4, 2, 2) > mat [,1] [,2] [1,] 1 3 [2,] 2 4 > layout(mat) Pour visualiser concr`tement la partition cre, on utilisera la fonction e ee layout.show avec en argument le nombre de sous-fentres (ici 4). Avec cet e exemple on aura :

> layout.show(4)
2 4

Les exemples qui suivent montrent certaines des possibilits ainsi oertes. e

> layout(matrix(1:6, 3, 2)) > layout.show(6)

1 2 3

4 5 6

> layout(matrix(1:6, 2, 3)) > layout.show(6)

40

> m <- matrix(c(1:3, 3), 2, 2) > layout(m) > layout.show(3)

1 3 2

Dans tous ces exemples, nous navons pas utilis loption byrow de matrix, e les sous-fentres sont donc numrotes par colonne ; il sut bien s r de spcier e e e u e matrix(..., byrow = TRUE) pour que les sous-fentres soient numrotes e e e par ligne. On peut aussi donner les numros dans la matrice dans lordre que e lon veut avec, par exemple, matrix(c(2, 1, 4, 3), 2, 2). Par dfaut, layout() va partitionner le graphique avec des hauteurs et e largeurs rguli`res : ceci peut tre modi avec les options widths et heights. e e e e Ces dimensions sont donnes relativement 12 . Exemples : e

> m <- matrix(1:4, 2, 2) > layout(m, widths=c(1, 3), heights=c(3, 1)) > layout.show(4)

> m <- matrix(c(1,1,2,1),2,2) > layout(m, widths=c(2, 1), heights=c(1, 2)) > layout.show(2)

2 1

Enn, les numros dans la matrice peuvent inclure des 0 donnant la pose sibilit de construire des partitions complexes (voire sotriques). e e e
2

> m <- matrix(0:3, 2, 2) > layout(m, c(1, 3), c(1, 3)) > layout.show(3)

12

Elles peuvent aussi tre donnes en centim`tres, cf. ?layout. e e e

41

> m <- matrix(scan(), 5, 5) 1: 0 0 3 3 3 1 1 3 3 3 11: 0 0 3 3 3 0 2 2 0 5 21: 4 2 2 0 5 26: Read 25 items > layout(m) > layout.show(5)

4 1 2 3 5

4.2

Les fonctions graphiques


Voici un aperu des fonctions graphiques principales de R. c

plot(x) plot(x, y) sunflowerplot(x, y) pie(x) boxplot(x) stripchart(x) coplot(x~y | z) interaction.plot (f1, f2, y)

matplot(x,y) dotchart(x) fourfoldplot(x)

assocplot(x)

mosaicplot(x) pairs(x) plot.ts(x)

graphe des valeurs de x (sur laxe des y) ordonnes sur laxe des e x graphe bivari de x (sur laxe des x) et y (sur laxe des y) e idem que plot() mais les points superposs sont dessins en e e forme de eurs dont le nombre de ptales reprsente le nombre e e de points graphe en camembert graphe boites et moustaches graphe des valeurs de x sur une ligne (une alternative a ` boxplot() pour des petits chantillons) e graphe bivari de x et y pour chaque valeur (ou intervalle de e valeurs) de z si f1 et f2 sont des facteurs, graphe des moyennes de y (sur laxe des y) en fonction des valeurs de f1 (sur laxe des x) et de f2 (direntes courbes) ; loption fun permet de choisir la e statistique rsume de y (par dfaut fun=mean) e e e e e e graphe bivari de la 1`re colonne de x contre la 1`re de y, la 2`me e `me e de x contre la 2 de y, etc. si x est un tableau de donnes, dessine un graphe de Cleveland e (graphes superposs ligne par ligne et colonne par colonne) e visualise, avec des quarts de cercles, lassociation entre deux variables dichotomiques pour direntes populations (x doit tre e e un tableau avec dim=c(2, 2, k) ou une matrice avec dim=c(2, 2) si k = 1) graphe de CohenFriendly indiquant les dviations de lhye poth`se dindpendance des lignes et des colonnes dans un tae e bleau de contingence a deux dimensions ` graphe en mosa que des rsidus dune rgression log-linaire e e e sur une table de contingence si x est une matrice ou un tableau de donnes, dessine tous les e graphes bivaris entre les colonnes de x e si x est un objet de classe "ts", graphe de x en fonction du temps, x peut tre multivari mais les sries doivent avoir les e e e mmes frquence et dates e e

42

ts.plot(x) hist(x) barplot(x) qqnorm(x) qqplot(x, y) contour(x, y, z)

filled.contour (x, y, z) image(x, y, z) persp(x, y, z) stars(x)

symbols(x, y, ...)

termplot(mod.obj)

idem mais si x est multivari les sries peuvent avoir des dates e e direntes et doivent avoir la mme frquence e e e histogramme des frquences de x e histogramme des valeurs de x quantiles de x en fonction des valeurs attendues selon une loi normale quantiles de y en fonction des quantiles de x courbes de niveau (les donnes sont interpoles pour tracer les e e courbes), x et y doivent tre des vecteurs et z une matrice e telle que dim(z)=c(length(x), length(y)) (x et y peuvent tre e omis) idem mais les aires entre les contours sont colores, et une e lgende des couleurs est galement dessine e e e idem mais les donnes sont reprsentes avec des couleurs e e e idem mais en perspective si x est une matrice ou un tableau de donnes, dessine un graphe e en segments ou en toile o` chaque ligne de x est reprsente par e u e e une toile et les colonnes par les longueurs des branches e dessine aux coordonnes donnes par x et y des symboles e e (cercles, carrs, rectangles, toiles, thermom`tres ou boxe e e plots ) dont les tailles, couleurs, etc, sont spcies par des e e arguments supplmentaires e graphe des eets (partiels) dun mod`le de rgression (mod.obj) e e

Pour chaque fonction, les options peuvent tre trouves via laide-en-ligne e e de R. Certaines de ces options sont identiques pour plusieurs fonctions graphiques ; voici les principales (avec leurs ventuelles valeurs par dfaut) : e e add=FALSE axes=TRUE type="p" si TRUE superpose le graphe au graphe existant (sil y en a un) si FALSE ne trace pas les axes ni le cadre le type de graphe qui sera dessin, "p" : points, "l" : e lignes, "b" : points connects par des lignes, "o" : idem e mais les lignes recouvrent les points, "h" : lignes verticales, "s" : escaliers, les donnes tant reprsentes par le e e e e sommet des lignes verticales, "S" : idem mais les donnes e tant reprsentes par le bas des lignes verticales e e e xe les limites infrieures et suprieures des axes, par e e exemple avec xlim=c(1, 10) ou xlim=range(x) annotations des axes, doivent tre des variables de mode e caract`re e titre principal, doit tre une variable de mode caract`re e e sous-titre (crit dans une police plus petite) e

xlim=, ylim= xlab=, ylab= main= sub=

4.3

Les fonctions graphiques secondaires

Il y a dans R un ensemble de fonctions graphiques qui ont une action sur un graphe dj` existant (ces fonctions sont appeles low-level plotting commands ea e 43

dans le jargon de R, alors que les fonctions prcdentes sont nommes highe e e level plotting commands). Voici les principales :

points(x, y) lines(x, y) text(x, y, labels, ...) mtext(text, side=3, line=0, ...) segments(x0, y0, x1, y1) arrows(x0, y0, x1, y1, angle=30, code=2) abline(a,b) abline(h=y) abline(v=x) abline(lm.obj) rect(x1, y1, x2, y2) polygon(x, y) legend(x, y, legend) title() axis(side, vect)

ajoute des points (loption type= peut tre utilise) e e idem mais avec des lignes ajoute le texte spci par labels au coordonnes (x,y) ; e e e un usage typique sera : plot(x, y, type="n") ; text(x, y, names) ajoute le texte spci par text dans la marge spcie par side e e e e (cf. axis() plus bas) ; line spcie la ligne a partir du cadre de e ` traage c trace des lignes des points (x0,y0) aux points (x1,y1) idem avec des `ches aux points (x0,y0) si code=2, aux points e (x1,y1) si code=1, ou aux deux si code=3 ; angle contrle langle o de la pointe par rapport a laxe ` trace une ligne de pente b et ordonne a lorigine a e ` trace une ligne horizontale sur lordonne y e trace une ligne verticale sur labcisse x trace la droite de rgression donne par lm.obj (cf. section 5) e e trace un rectangle dlimit a gauche par x1, a droite par x2, en e e` ` bas par y1 et en haut par y2 trace un polygone reliant les points dont les coordonnes sont e donnes par x et y e ajoute la lgende au point de coordonnes (x,y) avec les symboles e e donns par legend e ajoute un titre et optionnellement un sous-titre ajoute un axe en bas (side=1), a gauche (2), en haut (3) ou a ` ` droite (4) ; vect (optionnel) indique les abcisses (ou ordonnes) e o` les graduations seront traces u e ajoute un cadre autour du graphe dessine les donnes x sur laxe des x sous forme de petits traits e verticaux retourne les coordonnes (x, y) apr`s que lutilisateur ait cliqu e e e n fois sur le graphe avec la souris ; galement trace des symboles e (type="p") ou des lignes (type="l") en fonction de param`tres e graphiques optionnels (...) ; par dfaut ne trace rien (type="n") e

box() rug(x) locator(n, type="n", ...)

` A noter la possibilit dajouter des expressions mathmatiques sur un e e graphe a laide de text(x, y, expression(...)), o` la fonction expression ` u transforme son argument en quation mathmatique. Par exemple, e e > text(x, y, expression(p == over(1, 1+e^-(beta*x+alpha)))) va acher, sur le graphe, lquation suivante au point de coordonnes (x, y) : e e 1 p= ( x+) 1+e Pour inclure dans une expression une variable numrique on utilisera les e fonctions substitute et as.expression ; par exemple pour inclure une valeur de R2 (prcdemment calcule et stocke dans un objet nomm Rsquared) : e e e e e 44

> text(x, y, as.expression(substitute(R^2==r, list(r=Rsquared)))) qui achera sur le graphe au point de coordonnes (x, y) : e R2 = 0.9856298 Pour ne conserver que trois chires apr`s la virgule on modiera le code comme e suit : > text(x, y, as.expression(substitute(R^2==r, + list(r=round(Rsquared, 3))))) qui achera : R2 = 0.986 Enn, pour obtenir le R en italique : > text(x, y, as.expression(substitute(italic(R)^2==r, + list(r=round(Rsquared, 3))))) R2 = 0.986

4.4

Les param`tres graphiques e

En plus des fonctions graphiques secondaires, la prsentation des grae phiques peut tre amliore grce aux param`tres graphiques. Ceux-ci sutie e e a e lisent soit comme des options des fonctions graphiques principales ou secondaires (mais cela ne marche pas pour tous), soit a laide de la fonction par ` qui permet denregistrer les changements des param`tres graphiques de faon e c permanente, cest-`-dire que les graphes suivants seront dessins en fonction a e des nouveaux param`tres spcis par lutilisateur. Par exemple, linstruction e e e suivante : > par(bg="yellow") rsultera en un fond jaune pour tous les graphes. Il y a 73 param`tres grae e phiques, dont certains ont des rles proches. La liste dtaille peut tre obtenue o e e e avec ?par ; je me limite ici a ceux qui sont les plus couramment utiliss. ` e

adj

bg

contrle la justication du texte par rapport au bord gauche du texte : 0 a o ` gauche, 0.5 centr, 1 a droite, les valeurs > 1 dplacent le texte vers la gauche, e ` e et les valeurs ngatives vers la droite ; si deux valeurs dont donnes (ex. c(0, e e 0)) la seconde contrle la justication verticale par rapport a la ligne de base o ` du texte spcie la couleur de larri`re-plan (ex. bg="red", bg="blue" ; la liste des 657 e e couleurs disponibles est ache avec colors()) e

45

bty

cex

col font las lty

lwd mar

mfcol

mfrow pch ps pty tck

tcl xaxt yaxt

contrle comment le cadre est trac, valeurs permises : "o", "l", "7", "c", "u" o e ou "]" (le cadre ressemblant au caract`re correspondant) ; bty="n" supprime e le cadre une valeur qui contrle la taille des caract`res et des symboles par rapport o e au dfaut ; les param`tres suivants ont le mme contrle pour les nombres sur e e e o les axes, cex.axis, les annotations des axes, cex.lab, le titre, cex.main, le sous-titre, cex.sub contrle la couleur des symboles ; comme pour cex il y a : col.axis, col.lab, o col.main, col.sub un entier qui contrle le style du texte (1 : normal, 2 : italique, 3 : gras, 4 : gras o italique) ; comme pour cex il y a : font.axis, font.lab, font.main, font.sub un entier qui contrle comment sont disposes les annotations des axes (0 : o e parall`les aux axes, 1 : horizontales, 2 : perpendiculaires aux axes, 3 : verticales) e contrle le type de ligne trace, peut tre un entier (1 : continue, 2 : tirets, 3 : o e e points, 4 : points et tirets alterns, 5 : tirets longs, 6 : tirets courts et longs e alterns), ou un ensemble de 8 caract`res maximum (entre "0" et "9") qui e e spcie alternativement la longueur, en points ou pixels, des lments tracs e ee e et des blancs, par exemple lty="44" aura le mme eet que lty=2 e une valeur numrique qui contrle la largeur des lignes e o un vecteur de 4 valeurs numriques qui contrle lespace entre les axes et le e o bord de la gure de la forme c(bas, gauche, haut, droit), les valeurs par dfaut sont c(5.1, 4.1, 4.1, 2.1) e un vecteur de forme c(nr,nc) qui partitionne la fentre graphique en une e matrice de nr lignes et nc colonnes, les graphes sont ensuite dessins en colonne e (cf. section 4.1.2) idem mais les graphes sont ensuite dessins en ligne (cf. section 4.1.2) e contrle le type de symbole, soit un entier entre 1 et 25, soit nimporte quel o caract`re entre guillements (Fig. 2) e un entier qui contrle la taille en points du texte et des symboles o un caract`re qui spcie la forme du graphe, "s" : carre, "m" : maximale e e e une valeur qui spcie la longueur des graduations sur les axes en fraction du e plus petit de la largeur ou de la hauteur du graphe ; si tck=1 une grille est trace e idem mais en fraction de la hauteur dune ligne de texte (dfaut tcl=-0.5) e si xaxt="n" laxe des x est dni mais pas trac (utile avec axis(side=1, e e ...)) si yaxt="n" laxe des y est dni mais pas trac (utile avec axis(side=2, e e ...))

4.5

Un exemple concret

An dillustrer lutilisation des fonctionnalits graphiques de R, considrons e e un cas concret et simple dun graphe bivari de 10 paires de valeurs alatoires. e e Ces valeurs ont t gnres avec : ee e ee > x <- rnorm(10) > y <- rnorm(10) Le graphe voulu sera obtenu avec plot() ; on tapera la commande : 46

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

"*"

"?"

"."

"X"

"a"

X a

Fig. 2 Les symboles pour tracer des points avec R (pch=1:25). Les couleurs ont t obtenues avec les options col="blue", bg="yellow", la seconde opee tion na un eet que pour les symboles 21 a 25. Nimporte quel caract`re peut ` e tre utilis (pch="*", " ?", ".", . . .). e e

y 1.0 0.5 0.5

0.0

0.5

0.0 x

0.5

1.0

Fig. 3 La fonction plot utilise sans options. e

47

> plot(x, y) et le graphique sera dessin sur le priphrique actif. Le rsultat est reprsent e e e e e e Fig. 3. Par dfaut, R dessine les graphiques de faon intelligente : lespae c cement entre les graduations sur les axes, la disposition des annotations, etc, sont calculs an que le graphique obtenu soit le plus intelligible possible. e Lutilisateur peut toutefois vouloir changer lallure du graphe, par exemple, pour conformer ses gures avec un style ditorial prdni ou les personnaliser e e e pour un sminaire. La faon la plus simple de changer la prsentation dun e c e graphe est dajouter des options qui modieront les arguments par dfaut. e Dans notre cas, nous pouvons modier de faon apprciable notre gure de la c e faon suivante : c plot(x, y, xlab="Ten random values", ylab="Ten other values", xlim=c(-2, 2), ylim=c(-2, 2), pch=22, col="red", bg="yellow", bty="l", tcl=0.4, main="How to customize a plot with R", las=1, cex=1.5) e e Le rsultat est la Fig. 4. Voyons en dtail chacune des options utilise. e Dabord, xlab et ylab vont changer les annotations sur les axes qui, par dfaut, taient les noms des variables. Ensuite, xlim et ylim nous permettent e e de dnir les limites sur les deux axes 13 . Le param`tre graphique pch a t ici e e ee utilis comme option : pch=22 spcie un carr dont la couleur du contour et e e e celle de lintrieur peuvent tre direntes et qui sont donnes, respectivement, e e e e par col et bg. On se reportera au tableau sur les param`tres graphiques pour e comprendre les modications apportes par bty, tcl, las et cex. Enn, un e titre a t ajout par loption main. ee e Les param`tres graphiques et les fonctions graphiques secondaires pere mettent daller plus loin dans la prsentation dun graphe. Comme vu prce e e demment, certains param`tres graphiques ne peuvent pas tre passs comme e e e arguments dans une fonction comme plot. Nous allons maintenant modier certains de ces param`tres avec par(), il est donc ncessaire cette fois de tae e per plusieurs commandes. Quand les param`tres graphiques sont modis, il e e est utile de sauver les valeurs initiales de ces param`tres au pralable an de e e pouvoir les rtablir par la suite. Voici les commandes pour obtenir la Fig. 5. e opar <- par() par(bg="lightyellow", col.axis="blue", mar=c(4, 4, 2.5, 0.25)) plot(x, y, xlab="Ten random values", ylab="Ten other values", xlim=c(-2, 2), ylim=c(-2, 2), pch=22, col="red", bg="yellow", bty="l", tcl=-.25, las=1, cex=1.5) title("How to customize a plot with R (bis)", font.main=3, adj=1) par(opar)
Par dfaut, R ajoute 4% de part et dautre des limites des axes. Ce comportement peut e tre supprim en mettant les param`tres graphiques xaxs="i" et yaxs="i" (ceux-ci peuvent e e e tre passs comme options a plot()). e e `
13

48

How to customize a plot with R


2

1 Ten other values

2 2 1 0 Ten random values 1 2

Fig. 4 La fonction plot utilise avec options. e

How to customize a plot with R (bis)


2

1 Ten other values

2 2 1 0 Ten random values 1 2

Fig. 5 Les fonctions par, plot et title.

49

Dtaillons les actions provoques par ces commandes. Tout dabord, les e e param`tres graphiques par dfaut sont sauvs dans une liste qui est nomme, e e e e par exemple, opar. Trois param`tres vont tre modis ensuite : bg pour la e e e couleur de larri`re-plan, col.axis pour la couleur des chires sur les axes et e mar pour les dimensions des marges autour du cadre de traage. Le graphe est c trac de faon presque similaire que pour la Fig. 4. On voit que la modication e c des marges a permis dutiliser de lespace libre autour du cadre de traage. c Le titre est ajout cette fois avec la fonction graphique secondaire title ce e qui permet de passer certains param`tres en arguments sans altrer le reste e e du graphique. Enn, les param`tres graphiques initiaux sont restaurs avec la e e derni`re commande. e e Maintenant, le contrle total ! Sur la Fig. 5, R dtermine encore certaines o choses comme le nombre de graduations sur les axes ou lespace entre le titre et le cadre de traage. Nous allons maintenant contrler totalement la c o prsentation du graphique. Lapproche utilise ici est de tracer le graphe a e e ` blanc avec plot(..., type="n"), puis dajouter les points, les axes, les annotations, etc, avec des fonctions graphiques secondaires. On se permettra aussi quelques fantaisies, comme de changer la couleur de fond du cadre de traage. Les commandes suivent, et le graphe produit est la Fig. 6. c opar <- par() par(bg="lightgray", mar=c(2.5, 1.5, 2.5, 0.25)) plot(x, y, type="n", xlab="", ylab="", xlim=c(-2, 2), ylim=c(-2, 2), xaxt="n", yaxt="n") rect(-3, -3, 3, 3, col="cornsilk") points(x, y, pch=10, col="red", cex=2) axis(side=1, c(-2, 0, 2), tcl=-0.2, labels=FALSE) axis(side=2, -1:1, tcl=-0.2, labels=FALSE) title("How to customize a plot with R (ter)", font.main=4, adj=1, cex.main=1) mtext("Ten random values", side=1, line=1, at=1, cex=0.9, font=3) mtext("Ten other values", line=0.5, at=-1.8, cex=0.9, font=3) mtext(c(-2, 0, 2), side=1, las=1, at=c(-2, 0, 2), line=0.3, col="blue", cex=0.9) mtext(-1:1, side=2, las=1, at=-1:1, line=0.2, col="blue", cex=0.9) par(opar) Comme prcdemment, les param`tres graphiques par dfaut sont enree e e e gistrs et la couleur de larri`re-plan est chang ainsi que les marges. Le graphe e e e est ensuite dessin avec type="n" pour ne pas tracer les points, xlab="", e ylab="" pour ne pas marquer les noms des axes et xaxt="n", yaxt="n" pour ne pas tracer les axes. Le rsultat est de tracer uniquement le cadre de traage e c et de dnir les axes en fonction de xlim et ylim. Notez quon aurait pu utilie ser loption axes=FALSE mais dans ce cas ni les axes ni le cadre nauraient t ee tracs. e Les lments sont ensuite ajouts dans le cadre ainsi dni avec des foncee e e tions graphiques secondaires. Avant dajouter les points, on va changer la 50

Ten other values

How to customize a plot with R (ter)

Ten random values

Fig. 6 Un graphe fait sur mesure . couleur dans le cadre avec rect() : les dimensions du rectangle sont choisies an de dpasser largement celles du cadre. e Les points sont tracs avec points() ; on a cette fois chang de symbole. e e Les axes sont ajouts avec axis() : le vecteur qui est pass en second argue e ment donne les coordonnes des graduations qui doivent tre traces. Loption e e e labels=FALSE spcie quaucune annotation nest ajoute avec les graduae e tions. Cette option accepte aussi un vecteur de mode caract`re, par exemple e labels=c("A", "B", "C"). Le titre est ajout avec title(), mais on a chang lg`rement la police. e e e e Les annotations des axes sont mises avec mtext() (marginal text). Le premier argument de cette fonction est un vecteur de mode caract`re qui donne le e texte a acher. Loption line indique la distance a partir du cadre de traage ` ` c (par dfaut line=0), et at la coordonne. Le second appel a mtext() utilise e e ` la valeur par dfaut de side (3). Les deux autres appels de mtext() passent e un vecteur numrique en premier argument : celui-ci sera converti en mode e caract`re. e

4.6

Les packages grid et lattice

Les packages grid et lattice implmentent les syst`mes grid et lattice. e e Grid est un nouveau mode graphique avec son propre systme de param`tres e e graphiques qui sont distincts de ceux vus ci-dessus. Les deux distinctions principales entre grid et le mode graphique de base sont : plus de exibilit pour diviser les priphriques graphiques a laide des e e e ` vues (viewports) qui peuvent tre chevauchantes (les objets graphiques e peuvent mme tre partags entre vues, par exemple des `ches) ; e e e e les objets graphiques (grob) peuvent tre modi`s ou eacs dun graphe e e e

51

sans avoir a le re-dessiner (comme doit tre fait avec le mode graphique ` e de base). Les graphiques obtenus avec grid ne peuvent habituellement pas tre come bins ou mlangs avec ceux produits par le mode graphique de base (le pae e e ckage gridBase doit tre utilis a cette n). Les deux modes graphiques peuvent e e` cependant tre utiliss dans la mme session sur le mme priphrique grae e e e e e phique. Lattice est essentiellement limplmentation dans R des graphiques de type e Trellis de S-PLUS. Trellis est une approche pour la visualisation de donnes e multivaries particuli`rement approprie pour lexploration de relations ou e e e e e dinteractions entre variables14 . Lide principale derri`re lattice (tout comme Trellis) est celle des graphes multiples conditionns : un graphe bivari entre e e deux variables sera dcoup en plusieurs graphes en fonction des valeurs dune e e troisi`me variable. La fonction coplot utilise une approche similaire, mais e lattice ore des fonctionnalits plus vastes. Lattice utilise grid comme mode e graphique. La plupart des fonctions de lattice prennent pour argument principal une formule15 , par exemple y ~ x. La formule y ~ x | z signie que le graphe de y en fonction de x sera dessin en plusieurs sous-graphes en fonction des e valeurs de z. Le tableau ci-dessous indique les principales fonctions de lattice. La formule donne en argument est la formule type ncessaire, mais toutes ces fonctions e e acceptent une formule conditionnelle (y ~ x | z) comme argument principal ; dans ce cas un graphe multiple, en fonction des valeurs de z, est dessin comme e nous le verrons dans les exemples ci-dessous. barchart(y ~ x) bwplot(y ~ x) densityplot(~ x) dotplot(y ~ x) histogram(~ x) qqmath(~ x) stripplot(y ~ x) qq(y ~ x) histogramme des valeurs de y en fonction de celles de x graphe boites et moustaches graphe de fonctions de densit e graphe de Cleveland (graphes superposs ligne e par ligne et colonne par colonne) histogrammes des frquences de x e quantiles de x en fonction des valeurs attendues selon une distribution thorique e graphe unidimensionnel, x doit tre numrique, e e y peut tre un facteur e quantiles pour comparer deux distributions, x doit tre numrique, y peut tre numrique, cae e e e ract`re ou facteur mais doit avoir deux niveaux e graphes bivaris (avec de nombreuses fonctione nalits) e

xyplot(y ~ x)

http://cm.bell-labs.com/cm/ms/departments/sia/project/trellis/index.html plot() accepte galement une formule en argument principal : si x et y sont deux vecteurs e de mme longueur, plot(y ~ x) et plot(x, y) donneront des graphiques identiques. e
15

14

52

levelplot(z ~ x*y) contourplot(z ~ x*y) cloud(z ~ x*y) wireframe(z ~ x*y) splom(~ x) parallel(~ x)

graphe en couleur des valeurs de z aux coordonnes fournies par x et y (x, y et z sont tous e de mme longueur) e graphe 3-D en perspective (points) idem (surface) matrice de graphes bivaris e graphe de coordonnes parall`les e e

Voyons maintenant quelques exemples an dillustrer quelques aspects de lattice. Il faut au pralable charger le package en mmoire avec la commande e e library(lattice) an daccder aux fonctions. e Dabord, les graphes de fonctions de densit. Un tel graphe peut tre dese e sin simplement avec densityplot(~ x) qui tracera une courbe de densit e e empirique ainsi que les points correspondants aux observations sur laxe des x (comme rug()). Notre exemple sera un peu plus compliqu avec la supere position, sur chaque graphe, des courbes de densit empirique et de densit e e estime avec une loi normale. Il nous faut a cette n utiliser largument panel e ` qui dnit ce qui doit tre trac dans chaque graphe. Les commandes sont : e e e n <- seq(5, 45, 5) x <- rnorm(sum(n)) y <- factor(rep(n, n), labels=paste("n =", n)) densityplot(~ x | y, panel = function(x, ...) { panel.densityplot(x, col="DarkOliveGreen", ...) panel.mathdensity(dmath=dnorm, args=list(mean=mean(x), sd=sd(x)), col="darkblue") }) Les trois premi`res lignes gn`rent un chantillon de variables normales e e e e que lon divise en sous-chantillons deectif gal a 5, 10, 15, . . . et 45. Ene e ` suite vient lappel de densityplot qui produit un graphe par sous-chantillon. e panel prend pour argument une fonction. Dans notre exemple, nous avons dni une fonction qui fait appel a deux fonctions prdnies dans lattice : e ` e e panel.densityplot qui trace la fonction de densit empirique et panel.mathe density qui trace la fonction de densit estime avec une loi normale. La e e fonction panel.densityplot est appelle par dfaut si aucun argument nest e e donn a panel : la commande densityplot(~ x | y) aurait donn le mme e` e e graphe que sur la Fig. 7 mais sans les courbes bleues. Les exemples suivants sont pris, plus ou modis, des pages daide de lattice e et utilisent des donnes disponibles dans R : les localisations de 1000 sismes e e pr`s des Fidji et des donnes biomtriques sur des eurs de trois esp`ces e les e e e diris. La Fig. 8 reprsente la localisation gographique des sismes en fonction e e e de la profondeur. Les commandes ncessaires pour ce graphe sont : e 53

n = 35
0.6 0.5 0.4 0.3 0.2 0.1 0

n = 40

n = 45

n = 20

n = 25

n = 30
0.6 0.5

Density

0.4 0.3 0.2 0.1 0

n=5
0.6 0.5 0.4 0.3 0.2 0.1 0 4 2 0 2 4

n = 10

n = 15

Fig. 7 La fonction densityplot.

165 170 175

180 185

472544
10 15 20 25 30 35 40

544616

616688

256328

328400

400472
10 15

lat

20 25 30 35 40

40112
10 15 20 25 30 35 40 165 170 175 180 185

112184

184256

165

170 175 180 185

long

Fig. 8 La fonction xyplot avec les donnes quakes . e

54

data(quakes) mini <- min(quakes$depth) maxi <- max(quakes$depth) int <- ceiling((maxi - mini)/9) inf <- seq(mini, maxi, int) quakes$depth.cat <- factor(floor(((quakes$depth - mini) / int)), labels=paste(inf, inf + int, sep="-")) xyplot(lat ~ long | depth.cat, data = quakes) La premi`re commande charge le jeu de donnes quakes en mmoire. Les e e e cinq commandes suivantes crent un facteur en divisant la profondeur (vae riable depth) en neuf intervalles dtendues gales : les niveaux de ce facteur e e sont nomms avec les bornes infrieures et suprieures de ces intervalles. Il e e e sut ensuite dappeller la fonction xyplot avec la formule approprie et un e argument data qui indique o` xyplot doit chercher les variables 16 . u Avec les donnes iris, le chevauchement entre les direntes esp`ces est e e e susament faible pour les reprsenter ensemble sur la mme gure (Fig. 9). e e Les commandes correspondantes sont : data(iris) xyplot( Petal.Length ~ Petal.Width, data = iris, groups=Species, panel = panel.superpose, type = c("p", "smooth"), span=.75, auto.key = list(x = 0.15, y = 0.85) ) Lappel de la fonction xyplot est ici un peu plus complexe que dans lexemple prcdent et utilise plusieurs options que nous allons dtailler. Lope e e tion groups, comme son nom lindique, dnit des groupes qui seront utie liss par les autres options. On a dj` vu loption panel qui dnit comment e ea e les dirents groupes vont tre reprsents sur la graphe : on utilise ici une e e e e fonction prdnie panel.superpose an de superposer les groupes sur le e e mme graphe. Aucune option ntant passe a panel.superpose, les couleurs e e e ` par dfaut seront utilises pour distinguer les groupes. Loption type, comme e e dans plot(), prcise le type de traage, sauf quici on peut donner plusieurs e c arguments sous forme dun vecteur : "p" pour tracer les points et "smooth" pour tracer une courbe de lissage dont le degr est donn par span. Loption e e auto.key ajoute la lgende au graphe ; il est seulement ncessaire de donner, e e dans une liste, les coordonnes o` la lgende doit tre trace. Notez que ces e u e e e coordonnes sont relatives (cest-`-dire dans lintervalle [0, 1]). e a Nous allons voir maintenant la fonction splom avec les mmes donnes sur e e les iris. Les commandes suivantes ont servi a produire la Fig. 10 : `
plot() ne peut pas prendre dargument data, la localisation des variables doit tre e donne explicitement, par exemple plot(quakes$long ~ quakes$lat). e
16

55

7 o o o

o o o o o o o o o o o o o o o o o o o o o o o o o o

setosa versicolor virginica


o o o o o o o o o

o o o o o o o o o o o

5 o o o o o o o o o o o o o

o o o

o o o

Petal.Length

o o o o o

o o

o o o o

2 o o 1 o

o o o o o o o o

o o o o

o o o o o

0.5

1.5

2.5

Petal.Width

Fig. 9 La fonction xyplot avec les donnes iris . e splom( ~iris[1:4], groups = Species, data = iris, xlab = "", panel = panel.superpose, auto.key = list(columns = 3) ) Largument principal est cette fois une matrice (les quatre premi`res coe lonnes diris). Le rsultat est lensemble des graphes bivaris possibles entre e e les variables de la matrice, tout comme la fonction standard pairs. Par dfaut, e splom ajoute le texte Scatter Plot Matrix sous laxe des x : pour lviter on e a prcis xlab="". Le reste des options est similaire a lexemple prcdent, sauf e e ` e e quon a prcis columns = 3 pour auto.key an que la lgende soit dispose e e e e sur trois colonnes. e La Fig. 10 aurait pu tre faite avec pairs(), mais cette fonction ne peut pas produire des graphes conditionns comme sur la Fig. 11. Le code utilis e e est relativement simple : splom(~iris[1:3] | Species, data = iris, pscales = 0, varnames = c("Sepal\nLength", "Sepal\nWidth", "Petal\nLength")) Les sous-graphes tant assez petits, on a ajout deux options pour amliorer e e e la lisibilit de la gure : pscales = 0 supprime les graduations des axes (tous e les sous-graphes sont a la mme chelle), et on a redni les noms des variables ` e e e pour les faire tenir sur deux lignes ("\n" code pour un saut de ligne dans une chaine de caract`res). e Le dernier exemple utilise la mthode des coordonnes parall`les pour e e e lanalyse exploratoire de donnes multivaries. Les variables sont alignes sur e e e un axe (par exemple sur laxe des y) et les valeurs observes sont reprsentes e e e sur lautre axe (les variables tant mises a la mme chelle, par exemple en les e ` e e 56

Setosa
o o o o o oo oo o o o o o o ooo o o o o o o oo o o o oo o o o oo o o oo o o o o o o oo oooo o o oo o oo o ooo o o o oo o o oooooooo oo o oo o ooo o o o oooooooo oo o o o oo o oo o oo o oo oo ooo o ooooooo oo o oo oo o o o oo oo o o oo o oooooo o o o o o o oo o oo o o o ooooo oo o o o oo o o o o

Versicolor

Virginica
o oo o oo o oo ooo o o oo ooo o oo o oo o oo o oo o o oo o o ooo oo o oo oo o oo o oo ooo o ooooo o ooo oo o oo oo oo o ooo o 2.5 2 1.5 1.5 2 2.5

Petal.Width
1 0.5

o ooo o ooo oo o o ooo oo ooo o oo oo o oooooooooo ooo oooo oo 0 oo o ooo o o 7 o oo 4 5 6 7 o o o o o o o o ooo o o o oooo 6 oo ooooooo o o o o oo o o o o o oo o o ooo o 5 o oo o oo o o o o oo ooo o oo o o o oo ooo oo o oo o o oo oo ooooooo o oo oooo o ooo ooo o o o o 4 Petal.Length 4 oo oooooo o oo o oo ooo o o o o oo o o o o o 3 o o o 4.5 4 3.5 o o o oooo o oooooooooooooo o 1 o o 3.5 4 2 2 3 4 1

0.5

0 oooo oo oo o o o o ooo o o o ooooo o o oooooo oo ooooooo o o ooooo o oo o o ooo o o o o o

ooo o o o oo o o oo o oo o o o oo o o o o o o ooo oo ooo o o oo o o o oo o o o o o oo o o o o o o o oo oo oo o o o oo o oooo o o oo o o o o o o o o oo o oo o o o o o ooo o o o o oo o o oo o o o o oo o oo ooo o oo o o oo oo oo o oo oo o o o oo o o o o 8 7 8 7

o oo oooo oooooo oooo o o o oo ooo oo oooo o o o oooo ooo oo o o o

Sepal.Width

4.5 o o oo o ooo o o o o ooo oo o oo o o oo oo o oo o oo 3 oo o 2.5 o

2.5

3 o o

Sepal.Length

6 5

o ooo oo oo oo o oo o oooooo o o oo o oooooooo oo oo oooooo o ooo o o oo o o ooooo o o o oo o oooooo ooo oo o oo o o o oo o o o o o o oo o o oo o o o o o ooooooo o o o ooo oo o oo o oo oooo o ooo o ooo oo o o o ooo o o oo o o o oo

oo o o ooo oo o oooooo o o ooooo oooooo o ooo o ooo o oooo oo o o oo o ooo o o ooo o ooo o ooo o o o o oo oo o o o o o oo oo o o o o o o oo o o oo oo o o ooo o o o ooo ooo o o o o oo o ooo o oooooo oo o o oo oooo o oo o ooo o ooooo o o o o ooo o o ooo o ooo oo oo o o o o

ooo o oo ooooo o o oooo o ooo o o oo o oo

oo o oo o ooo o oo ooo o oo ooooo oooo oooo o ooo ooooo ooooo o ooo oooooo oooo o oo oo o o oo o o o o oooo oo oo o o o o oo oo o ooo oo o oo ooo oo o o oo oooooooo oo o oo o o o o ooooo o o oo o o oooo o oo o o o oooo o o oo o o

Fig. 10 La fonction splom avec les donnes iris (1). e

virginica Petal Length

Sepal Width

Sepal Length setosa Petal Length versicolor Petal Length

Sepal Width

Sepal Width

Sepal Length

Sepal Length Scatter Plot Matrix

Fig. 11 La fonction splom avec les donnes iris (2). e

57

Min

Max

setosa
Petal.Width

versicolor

virginica

Petal.Length

Sepal.Width

Sepal.Length Min Max Min Max

Fig. 12 La fonction parallel avec les donnes iris . e rduisant). Les valeurs correspondant au mme individu sont relies par une e e e ligne. Avec les donnes iris on obtient la Fig. 12 avec le code suivant : e parallel(~iris[, 1:4] | Species, data = iris, layout = c(3, 1))

58

Les analyses statistiques avec R

Encore plus que pour les graphiques, il est impossible ici daller dans les dtails sur les possibilits oertes par R pour les analyses statistiques. Mon e e but est ici de donner des points de rep`re an de se faire une ide sur les e e caractristiques de R pour conduire des analyses de donnes. e e Le package stats inclut des fonctions pour un large vental danalyses stae tistiques : tests classiques, mod`les linaires (y compris rgression par les e e e moindres carrs, mod`les linaires gnraliss et analyse de variance), lois e e e e e e de distribution, rsums statistiques, classications hirarchiques, analyses e e e de sries-temporelles, moindres carrs non-linaires, et analyses multivaries. e e e e Dautres mthodes statistiques sont disponibles dans un grand nombre de pae ckages. Certains sont distribus avec une installation de base de R et sont e recommands, et de nombreux autres sont contribus et doivent tre installs e e e e par lutilisateur. Nous commencerons par un exemple simple, qui ne ncessite aucun pae ckage autre que stats, an de prsenter lapproche gnrale pour analyser des e e e donnes avec R. Puis nous dtaillerons certaines notions qui sont utiles en e e gnral quelque soit le type danalyse que lon veut conduire tel les formules e e et les fonctions gnriques. Ensuite, nous dresserons une vue densemble sur e e les packages.

5.1

Un exemple simple danalyse de variance

La fonction pour lanalyse de variance dans stats est aov. Pour lessayer, prenons un jeu de donnes disponible dans R : InsectSprays. Six insectie cides ont t tests en culture, la rponse observe tant le nombre dinsectes. ee e e e e Chaque insecticide ayant t test 12 fois, on a donc 72 observations. Laisee e sons de ct lexploration graphique de ces donnes pour se consacrer a une oe e ` simple analyse de variance de la rponse en fonction de linsecticide. Apr`s e e avoir charg les donnes en mmoire a laide de la fonction data, lanalyse est e e e ` faite apr`s transformation en racine carre de la rponse : e e e > data(InsectSprays) > aov.spray <- aov(sqrt(count) ~ spray, data = InsectSprays) Largument principal (et obligatoire) daov est une formule qui prcise e la rponse a gauche du signe ~ et le prdicteur a droite. Loption data = e ` e ` InsectSprays prcise que les variables doivent tre prises dans le tableau de e e donnes InsectSprays. Cette syntaxe est quivalente a : e e ` > aov.spray <- aov(sqrt(InsectSprays$count) ~ InsectSprays$spray)

59

ou encore (si lon connait les numros de colonne des variables) : e > aov.spray <- aov(sqrt(InsectSprays[, 1]) ~ InsectSprays[, 2]) La premi`re syntaxe est prfrable car plus claire. e ee Les rsultats ne sont pas achs car ceux-ci sont copis dans un objet e e e nomm aov.spray. Certaines fonctions sont utilises pour extraire les rsultats e e e dsirs, par exemple print pour acher un bref rsum de lanalyse (essentiele e e e lement les param`tres estims) et summary pour acher plus de dtails (dont e e e les tests statistiques) : > aov.spray Call: aov(formula = sqrt(count) ~ spray, data = InsectSprays) Terms: spray Residuals Sum of Squares 88.43787 26.05798 Deg. of Freedom 5 66 Residual standard error: 0.6283453 Estimated effects may be unbalanced > summary(aov.spray) Df Sum Sq Mean Sq F value Pr(>F) spray 5 88.438 17.688 44.799 < 2.2e-16 *** Residuals 66 26.058 0.395 --Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1 Rappelons que de taper le nom de lobjet en guise de commande quivaut a e ` la commande print(aov.spray). Une reprsentation graphique des rsultats e e peut tre obtenue avec plot() ou termplot(). Avant de taper la commande e plot(aov.spray), le graphique dera divis en quatre an que les quatre e graphes diagnostiques soient dessins sur le mme graphe. Les commandes e e sont : > > > > > opar <- par() par(mfcol = c(2, 2)) plot(aov.spray) par(opar) termplot(aov.spray, se=TRUE, partial.resid=TRUE, rug=TRUE)

et les graphes obtenus sont reprsents Fig. 13 et Fig. 14. e e

5.2

Les formules

Les formules sont un lment-clef des analyses statistiques avec R : la noee tation utilise est la mme pour (presque) toutes les fonctions. Une formule est e e 60

Standardized residuals

Residuals vs Fitted
Residuals 1.0
27 39

ScaleLocation plot
1.5
27 25 39

0.0

1.5

25

1.5

2.5 Fitted values

3.5

0.0 1.5

0.5

1.0

2.5 Fitted values

3.5

Standardized residuals

Normal QQ plot
0.08 Cooks distance 2
39 27

Cooks distance plot


27 25 39

25

0.00 0

0.04

20

40

60

Theoretical Quantiles

Obs. number

Fig. 13 Reprsentation graphique des rsultats de la fonction aov avec e e plot().

Partial for spray

3 0

3 spray

Fig. 14 Reprsentation graphique des rsultats de la fonction aov avec e e termplot().

61

typiquement de la forme y ~ model o` y est la rponse analyse et model est u e e un ensemble de termes pour lesquels les param`tres sont estims. Ces termes e e sont spars par des symboles arithmtiques mais qui ont ici une signication e e e particuli`re. e a+b eets additifs de a et de b X si X est une matrice, ceci quivaut a un efe ` fet additif de toutes ses colonnes, cest-`-dire a X[,1]+X[,2]+...+X[,ncol(X)]; certaines de ces colonnes peuvent tre slectionnes avec lindexation e e e numrique (ex. : X[,2:4]) e a:b eet interactif entre a et b a*b eets additifs et interactifs (identique a a+b+a:b) ` poly(a, n) polynome de a jusquau degr n e ^n inclue toutes les interactions jusquau niveau n, cest-`a dire (a+b+c)^2 est identique a a+b+c+a:b+a:c+b:c ` b %in% a les eets de b sont hirarchiquement inclus dans a (idene tique a a+a:b ou a/b) ` -b supprime leet de b, par exemple : (a+b+c)^2-a:b est identique a a+b+c+a:c+b:c ` -1 y~x-1 force la rgression a passer par lorigine (idem pour e ` y~x+0 ou 0+y~x) 1 y~1 ajuste un mod`le sans eets (juste l intercept ) e offset(...) ajoute un eet au mod`le sans estimer de param`tre (par e e ex. offset(3*x)) On voit que les oprateurs arithmtiques de R ont dans une formule un e e sens dirent de celui quils ont dans une expression classique. Par exemple, e la formule y~x1+x2 dnira le mod`le y = 1 x1 + 2 x2 + , et non pas (si e e loprateur + avait sa fonction habituelle) y = (x 1 + x2 ) + . Pour inclure e des oprations arithmtiques dans une formule, on utilisera la fonction I : la e e formule y~I(x1+x2) dnira alors le mod`le y = (x 1 + x2 ) + . De mme, e e e pour dnir le mod`le y = 1 x + 2 x2 + on utilisera la formule y ~ poly(x, e e 2) (et non pas y ~ x + x^2). Cependant, il est possible dinclure une fonction dans une formule an de transformer une variable comme nous lavons vu cidessus avec lanalyse de variance des donnes dinsecticides. e Pour les analyses de variance, aov() accepte une syntaxe particuli`re pour e spcier les eets alatoires. Par exemple, y ~ a + Error(b) signie eets e e additifs dun terme xe (a) et dun terme alatoire (b). e

5.3

Les fonctions gnriques e e

On se souvient que les fonctions de R agissent en fonction des attributs des objets ventuellement passs en arguments. La classe est un attibut qui mrite e e e une certaine attention ici. Il est tr`s frquent que les fonctions statistiques de e e R retournent un objet de classe emprunt au nom de la fonction (par exemple, e

62

aov retourne un objet de classe "aov", lm retourne un de classe "lm"). Les fonctions que nous pourrons utiliser par la suite pour extraire les rsultats e agiront spciquement en fonction de la classe de lobjet. Ces fonctions sont e dites gnriques. e e Par exemple, la fonction la plus utilise pour extraire des rsultats danae e lyse est summary qui permet dacher les rsultats dtaills. Selon que lobjet e e e qui est pass en argument est de classe "lm" (mod`le linaire) ou "aov" (anae e e lyse de variance), il est clair que les informations a acher ne seront pas les ` mmes. Lavantage des fonctions gnriques est davoir une syntaxe unique e e e pour tous les cas. Un objet qui contient les rsultats dune analyse est gnralement une liste e e e dont lachage est dtermine par sa classe. Nous avons dj` vu cette notion e e ea que les fonctions de R agissent spciquement en fonction de la nature des e objets qui sont donns en arguments. Cest un caract`re gnral de R 17 . Le e e e e tableau suivant donne les principales fonctions gnriques qui permettent dexe e traire des informations dun objet qui rsulte dune analyse. Lusage typique e de ces fonctions tant : e > mod <- lm(y ~ x) > df.residual(mod) [1] 8

print summary df.residual coef residuals deviance fitted logLik AIC

retourne un rsum succint e e retourne un rsum dtaill e e e e retourne le nombre de degrs de libert rsiduel e e e retourne les coecients estims (avec parfois leurs erreurs-standards) e retourne les rsidus e retourne la dviance e retourne les valeurs ajustes par le mod`le e e calcule le logarithme de la vraisemblance et le nombre de param`tre dun e mod`le e calcule le crit`re dinformation dAkaike ou AIC (dpend de logLik()) e e

Une fonction comme aov ou lm produit donc une liste dont les dirents e lments correspondent aux rsultats de lanalyse. Si lon reprend lexemple ee e de lanalyse de variance sur les donnes InsectSprays, on peut regarder la e structure de lobjet cr par aov : ee > str(aov.spray, max.level = -1) List of 13 - attr(*, "class")= chr [1:2] "aov" "lm" Une autre faon de regarder cette structure est dacher les noms des c lments de lobjet : ee
17

Il y a plus de 100 fonctions gnriques dans R. e e

63

> names(aov.spray) [1] "coefficients" [4] "rank" [7] "qr" [10] "xlevels" [13] "model"

"residuals" "fitted.values" "df.residual" "call"

"effects" "assign" "contrasts" "terms"

Les lments peuvent ensuite tre extraits comme vu prcdemment : ee e e e > aov.spray$coefficients (Intercept) sprayB sprayC 3.7606784 0.1159530 -2.5158217 sprayE sprayF -1.9512174 0.2579388 sprayD -1.5963245

summary() cre galement une liste, qui dans le cas daov() se limite a un e e ` tableau de tests : > str(summary(aov.spray)) List of 1 $ :Classes anova and data.frame: 2 obs. of 5 variables: ..$ Df : num [1:2] 5 66 ..$ Sum Sq : num [1:2] 88.4 26.1 ..$ Mean Sq: num [1:2] 17.688 0.395 ..$ F value: num [1:2] 44.8 NA ..$ Pr(>F) : num [1:2] 0 NA - attr(*, "class")= chr [1:2] "summary.aov" "listof" > names(summary(aov.spray)) NULL Les fonctions gnriques nagissent gnralement pas sur les objets : elles e e e e app`lent la fonction approprie en fonction de la classe de largument. Une e e fonction appele par une gnrique est une mthode (method) dans le jargon e e e e de R. De faon schmatique, une mthode est contruite selon generic.cls , c e e o` cls dsigne la classe de lobjet. Dans le cas de summary, on peut acher u e les mthodes correspondantes : e > apropos("^summary") [1] "summary" [3] "summary.aovlist" [5] "summary.data.frame" [7] "summary.factor" [9] "summary.glm.null" [11] "summary.lm" [13] "summary.manova" [15] "summary.mlm" [17] "summary.POSIXct" [19] "summary.table" "summary.aov" "summary.connection" "summary.default" "summary.glm" "summary.infl" "summary.lm.null" "summary.matrix" "summary.packageStatus" "summary.POSIXlt"

64

On peut visualiser les particularits de cette gnrique dans le cas de la e e e rgression linaire compare a lanalyse de variance avec un petit exemple e e e ` simul : e > x <- y <- rnorm(5) > lm.spray <- lm(y ~ x) > names(lm.spray) [1] "coefficients" "residuals" [4] "rank" "fitted.values" [7] "qr" "df.residual" [10] "call" "terms" > names(summary(lm.spray)) [1] "call" "terms" [4] "coefficients" "sigma" [7] "r.squared" "adj.r.squared" [10] "cov.unscaled"

"effects" "assign" "xlevels" "model" "residuals" "df" "fstatistic"

Le tableau suivant indique certaines fonctions gnriques qui font des anae e lyses supplmentaires a partir dun objet qui rsulte dune analyse faite au e ` e pralable, largument principal tant cet objet, mais dans certains cas un are e gument supplmentaire est ncessaire comme pour predict ou update. e e
add1 drop1 step anova predict update teste successivement tous les termes qui peuvent tre ajouts a un mod`le e e ` e teste successivement tous les termes qui peuvent tre enlevs dun mod`le e e e slectionne un mod`le par AIC (fait appel a add1 et drop1) e e ` calcule une table danalyse de variance ou de dviance pour un ou plusieurs e mod`les e calcule les valeurs prdites pour de nouvelles donnes a partir dun mod`le e e ` e r-ajuste un mod`le avec une nouvelle formule ou de nouvelles donnes e e e

Il y a galement diverses fonctions utilitaires qui extraient des informae tions dun objet mod`le ou dune formule, comme alias qui trouve les termes e linairement dpendants dans un mod`le linaire spci par une formule. e e e e e e Enn, il y a bien s r les fonctions graphiques comme plot qui ache divers u diagnostiques ou termplot (cf. lexemple ci-dessus) ; cette derni`re fonction e nest pas vraiment gnrique mais fait appel a predict. e e `

5.4

Les packages

Le tableau suivant liste les packages standards distribus avec une instale lation de base de R.

65

Package base datasets grDevices graphics grid methods splines stats stats4 tcltk tools utils

Description fonctions de base de R jeux de donnes de base e priphriques graphiques pour modes base et grid e e graphiques base graphiques grid dnition des mthodes et classes pour les objets R ainsi que e e des utilitaires pour la programmation rgression et classes utilisant les reprsentations polynoe e miales fonctions statistiques fonctions statistiques utilisant les classes S4 fonctions pour utiliser les lments de linterface graphique ee Tcl/Tk utilitaires pour le dveloppement de package et ladminise tration fonctions utilitaires de R

Certains de ces packages sont chargs en mmoire quand R est dmarr ; e e e e ceci peut tre ach avec la fonction search : e e > search() [1] ".GlobalEnv" [3] "package:stats" [5] "package:grDevices" [7] "package:datasets" [9] "package:base" "package:methods" "package:graphics" "package:utils" "Autoloads"

Les autres packages peuvent tre utiliss apr`s chargement : e e e > library(grid) La liste des fonctions dun package peut tre ache avec : e e > library(help = grid) ou en parcourant laide au format html. Les informations relatives a chaque ` fonction peuvent tre accdes comme vu prcdemment (p. 7). e e e e e De nombreux packages contribus allongent la liste des analyses possibles e avec R. Ils sont distribus sparment, et doivent tre installs et chargs en e e e e e e mmoire sous R. Une liste compl`te de ces packages contribus, accompagne e e e e 18 . Certains de ces padune description, se trouve sur le site Web du CRAN ckages sont regroups parmi les packages recommands car ils couvrent des e e mthodes souvent utilses en analyse des donnes. Les packages recommands e e e e sont souvent distribus avec une installation de base de R. Ils sont bri`vement e e dcrits dans le tableau ci-dessous. e
18

http://cran.r-project.org/src/contrib/PACKAGES.html

66

Package boot class cluster foreign KernSmooth lattice MASS

Description mthodes de r-chantillonnage et de bootstrap e ee mthodes de classication e mthodes daggrgation e e fonctions pour importer des donnes enregistrs sous divers e e formats (S3, Stata, SAS, Minitab, SPSS, Epi Info) mthodes pour le calcul de fonctions de densit (y compris e e bivaries) e graphiques Lattice (Trellis) contient de nombreuses fonctions, utilitaires et jeux de donnes accompagnant le livre Modern Applied Statistics e with S par Venables & Ripley mod`les additifs gnraliss e e e e mod`les linaires ou non-linaires a eets mixtes e e e ` rseaux neuronaux et mod`les log-linaires multinomiaux e e e mthodes de partitionnement rcursif e e analyses spatiales ( kriging , covariance spatiale, . . .) analyses de survie

mgcv nlme nnet rpart spatial survival

Il y a deux autres dpts principaux de packages pour R : le Projet Omee o gahat pour le Calcul Statistique19 centr sur les applications bass sur le web e e et les interfaces entre programmes et langages, et le Projet Bioconductor 20 spcialis dans les applications bioinformatiques (en particulier pour lanalyse e e des donnes de micro-arrays). e La procdure pour installer un package dpend du syst`me dexploitation e e e et si vous avez install R a partir des sources ou des excutables prcompils. e ` e e e Dans ce dernier cas, il est recommand dutiliser les packages prcompils e e e disponibles sur le site du CRAN. Sous Windows, lexcutable Rgui.exe a un e menu Packages qui permet dinstaller un ou plusieurs packages via internet a partir du site Web de CRAN ou des chiers .zip sur le disque local. ` Si lon a compil R, un package pourra tre install a partir de ses sources e e e` qui sont distribues sous forme de chiers .tar.gz. Par exemple, si lon veut e installer le package gee, on tlchargera dans un permier temps le chier ee e e e e gee 4.13-6.tar.gz (le numro 4.13-6 dsigne la version du package ; en gnral une seule version est disponible sur CRAN). On tapera ensuite a partir du ` syst`me (et non pas de R) la commande : e R CMD INSTALL gee_4.13-6.tar.gz Il y a plusieurs fonctions utiles pour grer les packages comme CRAN.packages, e installed.packages ou download.packages. Il est utile galement de taper e rguli`rement la commande : e e > update.packages()
19 20

http://www.omegahat.org/R/ http://www.bioconductor.org/

67

qui vrie les versions des packages installs en comparaison a celles disponibles e e ` sur CRAN (cette commande peut tre appele du menu Packages sous e e Windows). Lutilisateur peut ensuite mettre a jour les packages qui ont des ` versions plus rcentes que celles installes sur son syst`me. e e e

68

Programmer avec R en pratique

Maintenant que nous avons fait un tour densemble des fonctionnalits de e R, revenons au langage et a la programmation. Nous allons voir des ides ` e simples susceptibles dtre mises en pratique. e

6.1

Boucles et vectorisation

Le point fort de R par rapport a un logiciel a menus droulants est dans ` ` e la possibilit de programmer, de faon simple, une suite danalyses qui see c ront excutes successivement. Cette possibilit est propre a tout langage ine e e ` formatique, mais R poss`de des particularits qui rendent la programmation e e accessible a des non-spcialistes. ` e Comme les autres langages, R poss`de des structures de contrle qui ne e o sont pas sans rappeler celles du langage C. Supposons quon a un vecteur x, et pour les lments de x qui ont la valeur b, on va donner la valeur 0 a une ee ` autre variable y, sinon 1. On cre dabord un vecteur y de mme longueur que e e x: y <- numeric(length(x)) for (i in 1:length(x)) if (x[i] == b) y[i] <- 0 else y[i] <- 1 On peut faire excuter plusieurs instructions si elles sont encadres dans e e des accolades : for (i in 1:length(x)) { y[i] <- 0 ... } if (x[i] == b) { y[i] <- 0 ... } Une autre situation possible est de vouloir faire excuter une instruction e tant quune condition est vraie : while (myfun > minimum) { ... }

69

Les boucles et structures de contrle peuvent cependant tre vites dans o e e e la plupart des situations et ce grce a une caractristique du langage R : a ` e la vectorisation. La structure vectorielle rend les boucles implicites dans les expressions et nous en avons vu de nombreux cas. Considrons laddition de e deux vecteurs : > z <- x + y Cette addition pourrait tre crite avec une boucle comme cela se fait dans e e la plupart de langages : > z <- numeric(length(x)) > for (i in 1:length(z)) z[i] <- x[i] + y[i] Dans ce cas il est ncessaire de crer le vecteur z au pralable a cause de e e e ` lutilisation de lindexation. On ralise que cette boucle explicite ne fonctione nera que si x et y sont de mme longueur : elle devra tre modie si cela nest e e e pas le cas, alors que la premi`re expression marchera quelque soit la situation. e Les excutions conditionnelles (if ... else) peuvent tre vites avec e e e e lindexation logique ; en reprenant lexemple plus haut : > y[x == b] <- 0 > y[x != b] <- 1 Les expressions vectorises sont non seulement plus simples, mais aussi e plus ecaces dun point de vue informatique, particuli`rement pour les grosses e quantits de donnes. e e Il y a galement les fonctions du type apply qui vitent dcrire des e e e boucles. apply agit sur les lignes et/ou les colonnes dune matrice, sa syntaxe est apply(X, MARGIN, FUN, ...), o` X est la matrice, MARGIN indique u si laction doit tre applique sur les lignes (1), les colonnes (2) ou les deux e e (c(1, 2)), FUN est la fonction (ou loprateur mais dans ce cas il doit tre e e spci entre guillemets doubles) qui sera utilise, et ... sont dventuels are e e e guments supplmentaires pour FUN. Un exemple simple suit. e > > > > x <- rnorm(10, -5, 0.1) y <- rnorm(10, 5, 2) X <- cbind(x, y) # les colonnes gardent les noms "x" et "y" apply(X, 2, mean) x y -4.975132 4.932979 > apply(X, 2, sd) x y 0.0755153 2.1388071 lapply() va agir sur une liste : la syntaxe est similaire a celle dapply et ` le rsultat retourn est une liste. e e 70

> forms <- list(y ~ x, y ~ poly(x, 2)) > lapply(forms, lm) [[1]] Call: FUN(formula = X[[1]]) Coefficients: (Intercept) 31.683

x 5.377

[[2]] Call: FUN(formula = X[[2]]) Coefficients: (Intercept) poly(x, 2)1 4.9330 1.2181

poly(x, 2)2 -0.6037

sapply() est une variante plus exible de lapply() qui peut prendre un vecteur ou une matrice en argument principal, et retourne ses rsultats sous e une forme plus conviviale, en gnral sous forme de tableau. e e

6.2

Ecrire un programme en R

Typiquement, un programme en R sera crit dans un chier sauv au fore e mat ASCII et avec lextension .R. La situation typique o` un programme se u rv`le utile est lorsque lon veut excuter plusieurs fois une tche identique. e e e a Dans notre premier exemple, nous voulons tracer le mme graphe pour trois e esp`ces doiseaux direntes, les donnes se trouvant dans trois chiers dise e e tincts. Nous allons procder pas-`-pas en voyant direntes faons de construire e a e c un programme pour ce probl`me tr`s simple. e e Dabord, construisons notre programme de la faon la plus intuitive en c faisant excuter successivement les direntes commandes dsires, en prenant e e e e soin au pralable de partitionner le graphique. e layout(matrix(1:3, 3, 1)) data <- read.table("Swal.dat") plot(data$V1, data$V2, type="l") title("swallow") data <- read.table("Wren.dat") plot(data$V1, data$V2, type="l") title("wren") data <- read.table("Dunn.dat") 71 # partitionne le graphique # lit les donnes e # ajoute le titre

plot(data$V1, data$V2, type="l") title("dunnock") Le caract`re # sert a ajouter des commentaires dans le programme : R e ` passe alors a la ligne suivante. ` Le probl`me de ce premier programme est quil risque de sallonger srieue e sement si lon veut ajouter dautres esp`ces. De plus, certaines commandes sont e rptes plusieurs fois, elles peuvent tre regroupes et excutes en modiant e ee e e e e les arguments qui changent. Les noms de chier et desp`ce sont donc utiliss e e comme des variables. La stratgie utilise ici est de mettre ces noms dans des e e vecteurs de mode caract`re, et dutiliser ensuite lindexation pour accder a e e ` leurs direntes valeurs. e layout(matrix(1:3, 3, 1)) # partitionne le graphique species <- c("swallow", "wren", "dunnock") file <- c("Swal.dat" , "Wren.dat", "Dunn.dat") for(i in 1:length(species)) { data <- read.table(file[i]) # lit les donnes e plot(data$V1, data$V2, type="l") title(species[i]) # ajoute le titre } On notera quil ny a pas de guillemets autour de file[i] dans read.table puisque cet argument est de mode caract`re. e Notre programme est maintenant plus compact. Il est plus facile dajouter dautres esp`ces car les deux vecteurs qui contiennent les noms desp`ces et de e e chiers sont dnis au dbut du programme. e e Les programmes ci-dessus pourront marcher si les chiers .dat sont placs e dans le rpertoire de travail de R, sinon il faut soit changer ce rpertoire de e e travail, ou bien spcier le chemin daccs dans le programme (par exemple : e e file <- "/home/paradis/data/Swal.dat"). Si les instructions sont crites e dans un chier Mybirds.R, on peut appeler le programme en tapant : > source("Mybirds.R") Comme pour toute lecture dans un chier, il est ncessaire de prciser le e e chemin dacc`s au chier sil nest pas dans le rpertoire de travail. e e

6.3

Ecrire ses fonctions

Lessentiel du travail de R se fait a laide de fonctions dont les arguments ` sont indiqus entre parenth`ses. Lutilisateur peut crire ses propres fonctions e e e qui auront les mmes proprits que les autres fonctions de R. e ee Ecrire ses propres fonctions permet une utilisation ecace, exible et rationnelle de R. Reprenons lexemple ci-dessus de la lecture de donnes dans e un chier suivi dun graphe. Si lon veut rpter cette opration quand on le e e e veut, il peut tre judicieux dcrire une fonction : e e 72

myfun <- function(S, F) { data <- read.table(F) plot(data$V1, data$V2, type="l") title(S) } Pour pouvoir tre excute, cette fonction doit tre charge en mmoire ce e e e e e e qui peut se faire de plusieurs faons. On peut entrer les lignes de la fonction c au clavier comme nimporte quelle commande, ou les copier/coller a partir ` dun diteur. Si la fonction a t enregistre dans un chier au format texte, e ee e on peut la charger avec source() comme un autre programme. Si lutilisateur veut que ses fonctions soient charges au dmarrage de R, il peut les enregistrer e e dans un workspace .RData qui sera charg en mmoire sil est localis dans e e e le rpertoire de travail de dmarrage. Une autre possibilt est de congurer e e e le chier .Rprole ou Rprole (voir ?Startup pour les dtails). Enn, il est e possible de crer un package mais ceci ne sera pas abord ici (on se reportera e e au manuel Writing R Extensions ). On pourra par la suite, par une seule commande, lire les donnes et dessiner e le graphe, par exemple myfun("swallow", "Swal.dat"). Nous arrivons donc a une troisi`me version de notre programme : ` e layout(matrix(1:3, 3, 1)) myfun("swallow", "Swal.dat") myfun("wren", "Wrenn.dat") myfun("dunnock", "Dunn.dat") On peut galement utiliser sapply() aboutissant a une quatri`me version e ` e du programme : layout(matrix(1:3, 3, 1)) species <- c("swallow", "wren", "dunnock") file <- c("Swal.dat" , "Wren.dat", "Dunn.dat") sapply(species, myfun, file) Avec R, il nest pas ncessaire de dclarer les variables qui sont utilises e e e dans une fonction. Quand une fonction est excute, R utilise une r`gle nomme e e e e tendue lexiquale (lexical scoping) pour dcider si un objet dsigne une vae e e riable locale a la fonction ou un objet global. Pour comprendre ce mcanisme, ` e considrons la fonction tr`s simple ci-dessous : e e > foo <- function() print(x) > x <- 1 > foo() [1] 1

73

Le nom x na pas t utilis pour crer un objet au sein de foo(), R va donc ee e e chercher dans lenvironnement immdiatement suprieur si un objet nomm x e e e existe et achera sa valeur (sinon un message derreur est ach et lexcution e e est termine). e Si lon utilise x comme nom dobjet au sein de notre fonction, la valeur de x dans lenvironnement global nest pas utilise. e > x <- 1 > foo2 <- function() { x <- 2; print(x) } > foo2() [1] 2 > x [1] 1 Cette fois print() a utilis lobjet x qui a t dni dans son environnee ee e ment, cest-`-dire celui de la fonction foo2. a Le mot immdiatement ci-dessus est important. Dans les deux exemples e que nous venons de voir, il y a deux environnements : celui global et celui de la fonction foo ou foo2. Sil y avait trois ou plus environnements embo es, t la recherche des objets se fait par paliers dun environnement a lenvi` ronnement immdiatement suprieur, ainsi de suite jusqu` lenvironnement e e a global. Il y a deux faons de spcier les arguments a une fonction : par leurs posic e ` tions ou par leurs noms. Par exemple, considrons une fonction qui prendrait e trois arguments : foo <- function(arg1, arg2, arg3) {...} On peut excuter foo() sans utiliser les noms arg1, . . ., si les objets e correspondants sont placs dans lordre, par exemple : foo(x, y, z). Par e contre, lordre na pas dimportance si les noms des arguments sont utiliss, e par exemple : foo(arg3 = z, arg2 = y, arg1 = x). Une autre particularit e des fonctions dans R est la possibilit dutiliser des valeurs par dfaut dans la e e dnition. Par exemple : e foo <- function(arg1, arg2 = 5, arg3 = FALSE) {...} Les commandes foo(x), foo(x, 5, FALSE) et foo(x, arg3 = FALSE) auront exactement le mme rsultat. Lutilisation de valeurs par dfaut dans e e e la dnition dune fonction est tr`s utile, particuli`rement en conjonction avec e e e les arguments nomms (notamment pour changer une seule valeur par dfaut : e e foo(x, arg3 = TRUE)). Pour conclure cette partie, nous allons voir un exemple de fonction nest pas purement statistique mais qui illustre bien la exibilit de R. Considrons e e que lon veuille tudier le comportement dun mod`le non-linaire : le mod`le e e e e de Ricker dni par : e

74

Nt+1 = Nt exp r 1

Nt K

Ce mod`le est tr`s utilis en dynamique des populations, en particulier de e e e poissons. On voudra a laide dune fonction simuler ce mod`le en fonction du ` e taux de croissance r et de leectif initial de la population N 0 (la capacit du e milieu K est couramment prise gale a 1 et cette valeur sera prise par dfaut) ; e ` e les rsultats seront achs sous forme de graphique montrant les changements e e deectifs au cours du temps. On ajoutera une option qui permettra de rduire e lachage des rsultats aux derni`res gnrations (par dfaut tous les rsultats e e e e e e seront achs). La fonction ci-dessous permet de faire cette analyse numrique e e du mod`le de Ricker. e ricker <- function(nzero, r, K=1, time=100, from=0, to=time) { N <- numeric(time+1) N[1] <- nzero for (i in 1:time) N[i+1] <- N[i]*exp(r*(1 - N[i]/K)) Time <- 0:time plot(Time, N, type="l", xlim=c(from, to)) } Essayez vous-mmes avec : e > > > > layout(matrix(1:3, 3, 1)) ricker(0.1, 1); title("r = 1") ricker(0.1, 2); title("r = 2") ricker(0.1, 3); title("r = 3")

75

Littrature sur R e

Manuels. Plusieurs manuels sont distribus avec R dans R HOME/doc/manual/ : e An Introduction to R [R-intro.pdf], R Installation and Administration [R-admin.pdf], R Data Import/Export [R-data.pdf], Writing R Extensions [R-exts.pdf], R Language Denition [R-lang.pdf]. Les chiers correspondants peuvent tre sous divers formats (pdf, html, e texi, . . .) en fonction du type dinstallation. FAQ. R est galement distribu avec un FAQ (Frequently Asked Questions) e e localis dans le rpertoire R HOME/doc/html/. Une version de ce Re e FAQ est rguli`rement mise a jour sur le site Web du CRAN : e e ` http://cran.r-project.org/doc/FAQ/R-FAQ.html . Ressources en-ligne. Le site Web du CRAN accueille plusieurs documents et ressources bibliographiques ainsi que des liens vers dautres sites. On peut y trouver une liste de publications (livres et articles) lies a R ou e ` 21 et des documents et manuels crits par des e aux mthodes statistiques e utilisateurs de R22 . Listes de discussion. Il y a quatre listes de discussion lectronique sur R ; e pour sinscrire, envoyer un message ou consulter les archives voir : http://www.R-project.org/mail.html La liste de discussion gnrale r-help est une source intressante dine e e formation pour les utilisateurs (les trois autres listes sont consacres aux e annonces de nouvelles versions, et aux dveloppeurs). De nombreux utie lisateurs ont envoy sur r-help des fonctions ou des programmes qui e peuvent donc tre trouvs dans les archives. Il est donc important si e e lon a un probl`me avec R de procder dans lordre avant denvoyer un e e message a r-help et de : ` 1. consulter attentivement laide-en-ligne (ventuellement avec le moe teur de recherche) ; 2. consulter le R-FAQ ; 3. chercher dans les archives de r-help a ladresse ci-dessus ou en ` consultant un des moteurs de recherche mis en place sur certains sites Web 23 ;
http://www.R-project.org/doc/bib/R-publications.html http://cran.r-project.org/other-docs.html 23 Les adresses de ces sites sont rpertories sur e e http://cran.r-project.org/search.html
22 21

celui

du

CRAN

a `

76

4. lire le posting guide 24 avant denvoyer vos questions. R News. La revue lectronique R News a pour but de combler lespace entre e les listes de discussion lectroniques et les publications scientiques trae ditionnelles. Le premier numro a t publi en janvier 2001 25 . e ee e Citer R dans une publication. Enn, si vous mentionnez R dans une publication, il faut citer la rfrence suivante : ee R Development Core Team (2005). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0, URL: http://www.R-project.org.

24 25

http://www.r-project.org/posting-guide.html http://cran.r-project.org/doc/Rnews/

77