Paradis rdebuts fr

1,978 views
1,883 views

Published on

Published in: Education, Travel, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,978
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Paradis rdebuts fr

  1. 1. R pour les d´butants e Emmanuel Paradis ´ Institut des Sciences de l’Evolution Universit´ Montpellier II e F-34095 Montpellier c´dex 05 e France E-mail : paradis@isem.univ-montp2.fr
  2. 2. ´ Je remercie Julien Claude, Christophe Declercq, Elodie Gazave, FriedrichLeisch, Louis Luangkesron, Fran¸ois Pinard et Mathieu Ros pour leurs com- cmentaires et suggestions sur des versions pr´c´dentes de ce document. J’ex- e eprime ´galement ma reconnaissance a tous les membres du R Development e `Core Team pour leurs efforts consid´rables dans le d´veloppement de R et dans e el’animation de la liste de discussion ´lectronique « r-help ». Merci ´galement e eaux utilisateurs de R qui par leurs questions ou commentaires m’ont aid´ a e `´crire R pour les d´butants. Mention sp´ciale a Jorge Ahumada pour la tra-e e e `duction en espagnol. c 2002, 2005, Emmanuel Paradis (12 septembre 2005) Permission est accord´e de copier et distribuer ce document, en partie ou en etotalit´, dans nimporte quelle langue, sur nimporte quel support, a condition e `que la notice c ci-dessus soit incluse dans toutes les copies. Permission estaccord´e de traduire ce document, en partie ou en totalit´, dans nimporte e equelle langue, a condition que la notice c ci-dessus soit incluse. `
  3. 3. Table des mati`res e1 Pr´ambule e 12 Quelques concepts avant de d´marrere 3 2.1 Comment R travaille . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Cr´er, lister et effacer les objets en m´moire . . . . . . . . . . . e e 5 2.3 L’aide en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Les donn´es avec R e 10 3.1 Les objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.2 Lire des donn´es dans un fichier . . . . . . . . . . . . . . . . . . 12 e 3.3 Enregistrer les donn´es . . . . . . . . . . . . . . . . . . . . . . . 16 e 3.4 G´n´rer des donn´es . . . . . . . . . . . . . . . . . . . . . . . . 17 e e e 3.4.1 S´quences r´guli`res . . . . . . . . . . . . . . . . . . . . 17 e e e 3.4.2 S´quences al´atoires . . . . . . . . . . . . . . . . . . . . 19 e e 3.5 Manipuler les objets . . . . . . . . . . . . . . . . . . . . . . . . 20 3.5.1 Cr´ation d’objets . . . . . . . . . . . . . . . . . . . . . . 20 e 3.5.2 Conversion d’objets . . . . . . . . . . . . . . . . . . . . 25 3.5.3 Les op´rateurs . . . . . . . . . . . . . . . . . . . . . . . 27 e 3.5.4 Acc´der aux valeurs d’un objet : le syst`me d’indexation 28 e e 3.5.5 Acc´der aux valeurs d’un objet avec les noms . . . . . . 31 e 3.5.6 L’´diteur de donn´es . . . . . . . . . . . . . . . . . . . . 32 e e 3.5.7 Calcul arithm´tique et fonctions simples . . . . . . . . . 33 e 3.5.8 Calcul matriciel . . . . . . . . . . . . . . . . . . . . . . . 354 Les graphiques avec R 38 4.1 Gestion des graphiques . . . . . . . . . . . . . . . . . . . . . . . 38 4.1.1 Ouvrir plusieurs dispositifs graphiques . . . . . . . . . . 38 4.1.2 Partitionner un graphique . . . . . . . . . . . . . . . . . 39 4.2 Les fonctions graphiques . . . . . . . . . . . . . . . . . . . . . . 42 4.3 Les fonctions graphiques secondaires . . . . . . . . . . . . . . . 43 4.4 Les param`tres graphiques . . . . . . . . . . . e . . . . . . . . . . 45 4.5 Un exemple concret . . . . . . . . . . . . . . . . . . . . . . . . 46 4.6 Les packages grid et lattice . . . . . . . . . . . . . . . . . . . . . 515 Les analyses statistiques avec R 59 5.1 Un exemple simple d’analyse de variance . . . . . . . . . . . . . 59 5.2 Les formules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.3 Les fonctions g´n´riques . . . . e e . . . . . . . . . . . . . . . . . . 62 5.4 Les packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
  4. 4. 6 Programmer avec R en pratique 69 6.1 Boucles et vectorisation . . . . . . . . . . . . . . . . . . . . . . 69 ´ 6.2 Ecrire un programme en R . . . . . . . . . . . . . . . . . . . . 71 ´ 6.3 Ecrire ses fonctions . . . . . . . . . . . . . . . . . . . . . . . . . 727 Litt´rature sur R e 76
  5. 5. 1 Pr´ambule e Le but du pr´sent document est de fournir un point de d´part pour les e enovices int´ress´s par R. J’ai fait le choix d’insister sur la compr´hension du e e efonctionnement de R, bien sˆ r dans le but d’une utilisation de niveau d´butant u eplutˆt qu’expert. Les possibilit´s offertes par R ´tant tr`s vastes, il est utile o e e epour le d´butant d’assimiler certaines notions et concepts afin d’´voluer plus e eais´ment par la suite. J’ai essay´ de simplifier au maximum les explications e epour les rendre accessibles a tous, tout en donnant les d´tails utiles, parfois ` esous forme de tableaux. R est un syst`me d’analyse statistique et graphique cr´´ par Ross Ihaka e eeet Robert Gentleman 1 . R est a la fois un logiciel et un langage qualifi´ de ` edialecte du langage S cr´´ par AT&T Bell Laboratories. S est disponible sous eela forme du logiciel S-PLUS commercialis´ par la compagnie Insightful 2 . Il y ea des diff´rences importantes dans la conception de R et celle de S : ceux qui eveulent en savoir plus sur ce point peuvent se reporter a l’article de Ihaka & `Gentleman (1996) ou au R-FAQ 3 dont une copie est ´galement distribu´e avec e eR. R est distribu´ librement sous les termes de la GNU General Public Li- ecence 4 ; son d´veloppement et sa distribution sont assur´s par plusieurs sta- e etisticiens rassembl´s dans le R Development Core Team. e R est disponible sous plusieurs formes : le code (´crit principalement en C eet certaines routines en Fortran), surtout pour les machines Unix et Linux, oudes ex´cutables pr´compil´s pour Windows, Linux et Macintosh. Les fichiers e e epour installer R, a partir du code ou des ex´cutables, sont distribu´s a partir du ` e e `site internet du Comprehensive R Archive Network (CRAN) 5 o` se trouvent uaussi les instructions a suivre pour l’installation sur chaque syst`me. En ce ` equi concerne les distributions de Linux (Debian, . . .), les ex´cutables sont eg´n´ralement disponibles pour les versions les plus r´centes ; consultez le site e e edu CRAN si besoin. R comporte de nombreuses fonctions pour les analyses statistiques et lesgraphiques ; ceux-ci sont visualis´s imm´diatement dans une fenˆtre propre et e e epeuvent ˆtre export´s sous divers formats (jpg, png, bmp, ps, pdf, emf, pictex, e exfig ; les formats disponibles peuvent d´pendre du syst`me d’exploitation). e eLes r´sultats des analyses statistiques sont affich´s a l’´cran, certains r´sultats e e ` e epartiels (valeurs de P, coefficients de r´gression, r´sidus, . . .) peuvent ˆtre e e esauv´s a part, export´s dans un fichier ou utilis´s dans des analyses ult´rieures. e ` e e e 1 Ihaka R. & Gentleman R. 1996. R: a language for data analysis and graphics. Journalof Computational and Graphical Statistics 5 : 299–314. 2 voir http://www.insightful.com/products/splus/default.asp pour plus d’information 3 http://cran.r-project.org/doc/FAQ/R-FAQ.html 4 pour plus d’infos : http://www.gnu.org/ 5 http://cran.r-project.org/ 1
  6. 6. Le langage R permet, par exemple, de programmer des boucles qui vontanalyser successivement diff´rents jeux de donn´es. Il est aussi possible de com- e ebiner dans le mˆme programme diff´rentes fonctions statistiques pour r´aliser e e edes analyses plus complexes. Les utilisateurs de R peuvent b´n´ficier des nom- e ebreux programmes ´crits pour S et disponibles sur internet 6 , la plupart de ces eprogrammes ´tant directement utilisables avec R. e De prime abord, R peut sembler trop complexe pour une utilisation parun non-sp´cialiste. Ce n’est pas forc´ment le cas. En fait, R privil´gie la flexi- e e ebilit´. Alors qu’un logiciel classique affichera directement les r´sultats d’une e eanalyse, avec R ces r´sultats sont stock´s dans un “objet”, si bien qu’une ana- e elyse peut ˆtre faite sans qu’aucun r´sultat ne soit affich´. L’utilisateur peut e e eˆtre d´concert´ par ceci, mais cette facilit´ se r´v`le extrˆmement utile. Ene e e e e e eeffet, l’utilisateur peut alors extraire uniquement la partie des r´sultats qui el’int´resse. Par exemple, si l’on doit faire une s´rie de 20 r´gressions et que e e el’on veuille comparer les coefficients des diff´rentes r´gressions, R pourra affi- e echer uniquement les coefficients estim´s : les r´sultats tiendront donc sur une e eligne, alors qu’un logiciel plus classique pourra ouvrir 20 fenˆtres de r´sultats. e eOn verra d’autres exemples illustrant la flexibilit´ d’un syst`me comme R e evis-`-vis des logiciels classiques. a 6 par exemple : http://stat.cmu.edu/S/ 2
  7. 7. 2 Quelques concepts avant de d´marrer e Une fois R install´ sur votre ordinateur, il suffit de lancer l’ex´cutable e ecorrespondant pour d´marrer le programme. L’attente de commandes (par ed´faut le symbole ‘>’) apparait alors indiquant que R est prˆt a ex´cuter e e ` eles commandes. Sous Windows en utilisant le programme Rgui.exe, certainescommandes (acc`s a l’aide, ouverture de fichiers, . . .) peuvent ˆtre ex´cut´es e ` e e epar les menus. L’utilisateur novice a alors toutes les chances de se demander« Je fais quoi maintenant ? » Il est en effet tr`s utile d’avoir quelques id´es e esur le fonctionnement de R lorsqu’on l’utilise pour la premi`re fois : c’est ce eque nous allons voir maintenant. Nous allons dans un premier temps voir sch´matiquement comment R tra- evaille. Ensuite nous d´crirons l’op´rateur « assigner » qui permet de cr´er e e edes objets, puis comment g´rer les objets en m´moire, et finalement comment e eutiliser l’aide en ligne qui est extrˆmement utile dans une utilisation courante. e2.1 Comment R travaille Le fait que R soit un langage peut effrayer plus d’un utilisateur potentielpensant « Je ne sais pas programmer ». Cela ne devrait pas ˆtre le cas pour edeux raisons. D’abord, R est un langage interpr´t´ et non compil´, c’est-`-dire ee e aque les commandes tap´es au clavier sont directement ex´cut´es sans qu’il soit e e ebesoin de construire un programme complet comme cela est le cas pour laplupart des langages informatiques (C, Fortran, Pascal, . . .). Ensuite, la syntaxe de R est tr`s simple et intuitive. Par exemple, une er´gression lin´aire pourra ˆtre faite avec la commande lm(y ~ x). Avec R, e e eune fonction, pour ˆtre ex´cut´e, s’´crit toujours avec des parenth`ses, mˆme e e e e e esi elles ne contiennent rien (par exemple ls()). Si l’utilisateur tape le nomde la fonction sans parenth`ses, R affichera le contenu des instructions de ecette fonction. Dans la suite de ce document, les noms des fonctions sontg´n´ralement ´crits avec des parenth`ses pour les distinguer des autres objets e e e esauf si le texte indique clairement qu’il s’agit d’une fonction. Quand R est utilis´, les variables, les donn´es, les fonctions, les r´sultats, e e eetc, sont stock´s dans la m´moire de l’ordinateur sous forme d’objets qui e eont chacun un nom. L’utilisateur va agir sur ces objets avec des op´rateurs e(arithm´tiques, logiques, de comparaison, . . .) et des fonctions (qui sont elles- emˆmes des objets). e L’utilisation des op´rateurs est relativement intuitive, on en verra les d´tails e eplus loin (p. 27). Une fonction de R peut ˆtre sch´matis´e comme suit : e e e 3
  8. 8. arguments −→ fonction ↑ =⇒r´sultat e options −→ arguments par d´faut e Les arguments peuvent ˆtre des objets (« donn´es », formules, expressions, e e . . .) dont certains peuvent ˆtre d´finis par d´faut dans la fonction ; ces valeurs e e e par d´faut peuvent ˆtre modifi´es par l’utilisateur avec les options. Une fonc- e e e tion de R peut ne n´cessiter aucun argument de la part de l’utilisateur : soit e tous les arguments sont d´finis par d´faut (et peuvent ˆtre chang´s avec les e e e e options), ou soit aucun argument n’est d´fini. On verra plus en d´tail l’utilisa- e e tion et la construction des fonctions (p. 72). La pr´sente description est pour e le moment suffisante pour comprendre comment R op`re. e Toutes les actions de R sont effectu´es sur les objets pr´sents dans la e e m´moire vive de l’ordinateur : aucun fichier temporaire n’est utilis´ (Fig. 1). e e Les lectures et ´critures de fichiers sont utilis´es pour la lecture et l’enregistre- e e ment des donn´es et des r´sultats (graphiques, . . .). L’utilisateur ex´cute des e e e fonctions par l’interm´diaire de commandes. Les r´sultats sont affich´s direc- e e e tement a l’´cran, ou stock´s dans un objet, ou encore ´crits sur le disque (en ` e e e particulier pour les graphiques). Les r´sultats ´tant eux-mˆmes des objets, ils e e e peuvent ˆtre consid´r´s comme des donn´es et ˆtre analys´s a leur tour. Les e ee e e e ` fichiers de donn´es peuvent ˆtre lus sur le disque de l’ordinateur local ou sur e e un serveur distant via internet. - fonctions et op´rateurs clavier commandes .../library/base/ biblioth`que esouris e /stast/ /graphics/ de fonctions ... ? - fichiers de objets « donn´es » e donn´es e internet XXX ) 6 XX X z X ´cran e ? objets « r´sultats » e PS JPEG ... M´moire vive e Disque dur Fig. 1 – Une vue sch´matique du fonctionnement de R. e Les fonctions disponibles sont stock´es dans une biblioth`que localis´es e e e sur le disque dans le r´pertoire R HOME/library (R HOME d´signant le e e r´pertoire o` R est install´). Ce r´pertoire contient des packages de fonctions, e u e e eux-mˆmes pr´sents sur le disque sous forme de r´pertoires. Le package nomm´ e e e e base est en quelque sorte le cœur de R et contient les fonctions de base du lan- 4
  9. 9. gage, en particulier pour la lecture et la manipulation des donn´es. Chaque pa- eckage a un r´pertoire nomm´ R avec un fichier qui a pour nom celui du package e e(par exemple, pour base, ce sera le fichier R HOME/library/base/R/base). Cefichier contient les fonctions du package. Une des commandes les plus simples consiste a taper le nom d’un objet `pour afficher son contenu. Par exemple, si un objet n contient la valeur 10 : n[1] 10 Le chiffre 1 entre crochets indique que l’affichage commence au premier´l´ment de n. Cette commande est une utilisation implicite de la fonction printeeet l’exemple ci-dessus est identique a print(n) (dans certaines situations, la `fonction print doit ˆtre utilis´e de fa¸on explicite, par exemple au sein d’une e e cfonction ou d’une boucle). Le nom d’un objet doit obligatoirement commencer par une lettre (A–Zet a–z) et peut comporter des lettres, des chiffres (0–9), des points (.) et des‘espaces soulign´s’ ( ). Il faut savoir aussi que R distingue, pour les noms des eobjets, les majuscules des minuscules, c’est-`-dire que x et X pourront servir a a `nommer des objets distincts (mˆme sous Windows). e2.2 Cr´er, lister et effacer les objets en m´moire e e Un objet peut ˆtre cr´´ avec l’op´rateur « assigner » qui s’´crit avec une e ee e efl`che compos´e d’un signe moins accol´ a un crochet, ce symbole pouvant ˆtre e e e` eorient´ dans un sens ou dans l’autre : e n - 15 n[1] 15 5 - n n[1] 5 x - 1 X - 10 x[1] 1 X[1] 10 Si l’objet existe d´j`, sa valeur pr´c´dente est effac´e (la modification n’af- ea e e efecte que les objets en m´moire vive, pas les donn´es sur le disque). La valeur e eainsi donn´e peut ˆtre le r´sultat d’une op´ration et/ou d’une fonction : e e e e n - 10 + 2 n 5
  10. 10. [1] 12 n - 3 + rnorm(1) n[1] 2.208807 La fonction rnorm(1) g´n`re une variable al´atoire normale de moyenne e e ez´ro et variance unit´ (p. 19). On peut simplement taper une expression sans e eassigner sa valeur a un objet, le r´sultat est alors affich´ a l’´cran mais n’est ` e e` epas stock´ en m´moire : e e (10 + 2) * 5[1] 60 Dans nos exemples, on omettra l’assignement si cela n’est pas n´cessaire a e `la compr´hension. e La fonction ls permet d’afficher une liste simple des objets en m´moire, ec’est-`-dire que seuls les noms des objets sont affich´s. a e name - Carmen; n1 - 10; n2 - 100; m - 0.5 ls()[1] m n1 n2 name Notons l’usage du point-virgule pour s´parer des commandes distinctes esur la mˆme ligne. Si l’on veut lister uniquement les objets qui contiennent un ecaract`re donn´ dans leur nom, on utilisera alors l’option pattern (qui peut e es’abr´ger avec pat) : e ls(pat = m)[1] m namePour restreindre la liste aux objets dont le nom commence par le caract`re en equestion : ls(pat = ^m)[1] m La fonction ls.str affiche des d´tails sur les objets en m´moire : e e ls.str()m : num 0.5n1 : num 10n2 : num 100name : chr Carmen L’option pattern peut ´galement ˆtre utilis´e comme avec ls. Une autre e e eoption utile de ls.str est max.level qui sp´cifie le niveau de d´tails de l’af- e efichage des objets composites. Par d´faut, ls.str affiche les d´tails de tous e eles objets contenus en m´moire, y compris les colonnes des jeux de donn´es, e ematrices et listes, ce qui peut faire un affichage tr`s long. On ´vite d’afficher e etous les d´tails avec l’option max.level = -1 : e 6
  11. 11. M - data.frame(n1, n2, m) ls.str(pat = M)M : ‘data.frame’: 1 obs. of 3 variables: $ 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: Pour effacer des objets de la m´moire, on utilise la fonction rm : rm(x) pour eeffacer l’objet x, rm(x, y) pour effacer les objets x et y, rm(list=ls()) poureffacer tous les objets en m´moire ; on pourra ensuite utiliser les mˆmes options e ecit´es pour ls() pour effacer s´lectivement certains objets : rm(list=ls(pat e e= ^m)).2.3 L’aide en ligne L’aide en ligne de R est extrˆment utile pour l’utilisation des fonctions. eL’aide est disponible directement pour une fonction donn´e, par exemple : e ?lmaffichera, dans R, la page d’aide pour la fonction lm() (linear model). Lescommandes help(lm) et help(lm) auront le mˆme effet. C’est cette derni`re e equ’il faut utiliser pour acc´der a l’aide avec des caract`res non-conventionnels : e ` e ?*Error: syntax error help(*)Arithmetic package:base R DocumentationArithmetic Operators... L’appel de l’aide ouvre une page (le comportement exact d´pend du syst`me e ed’exploitation) avec sur la premi`re ligne des informations g´n´rales dont le e e enom du package o` se trouvent la (ou les) fonction(s) ou les op´rateurs docu- u ement´s. Ensuite vient un titre suivi de paragraphes qui chacun apporte une einformation bien pr´cise. eDescription: br`ve description. eUsage: pour une fonction donne le nom avec tous ses arguments et les ´ven- e tuelles options (et les valeurs par d´faut correspondantes) ; pour un e op´rateur donne l’usage typique. eArguments: pour une fonction d´taille chacun des arguments. eDetails: description d´taill´e. e e 7
  12. 12. Value: le cas ´ch´ant, le type d’objet retourn´ par la fonction ou l’op´rateur. e e e eSee Also: autres rubriques d’aide proches ou similaires a celle document´e. ` eExamples: des exemples qui g´n´ralement peuvent ˆtre ex´cut´s sans ouvrir e e e e e l’aide avec la fonction example. Pour un d´butant, il est conseill´ de regarder le paragraphe Examples. En e eg´n´ral, il est utile de lire attentivement le paragraphe Arguments. D’autres e eparagraphes peuvent ˆtre rencontr´s, tel Note, References ou Author(s). e e Par d´faut, la fonction help ne recherche que dans les packages charg´s en e em´moire. L’option try.all.packages, dont le d´faut est FALSE, permet de e echercher 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 butcan be found in the following packages: Package Library splines /usr/lib/R/library Notez que dans ce cas la page d’aide de la fonction bs n’est pas ouverte.L’utilisateur peut ouvrir des pages d’aide d’un package non charg´ en m´moire e een utilisant l’option package : help(bs, package = splines)bs package:splines R DocumentationB-Spline Basis for Polynomial SplinesDescription: Generate the B-spline basis matrix for a polynomial spline.... On peut ouvrir l’aide au format html (qui sera lu avec Netscape, parexemple) en tapant : help.start() Une recherche par mots-clefs est possible avec cette aide html. La rubriqueSee Also contient ici des liens hypertextes vers les pages d’aide des autresfonctions. La recherche par mots-clefs est ´galement possible depuis R avec ela fonction help.search. Cette derni`re recherche un th`me, sp´cifi´ par une e e e echaˆ de caract`re, dans les pages d’aide de tous les packages install´s. Par ıne e eexemple, help.search(tree) affichera une liste des fonctions dont les pages 8
  13. 13. d’aide mentionnent « tree ». Notez que si certains packages ont ´t´ install´s ee er´cemment, il peut ˆtre utile de rafraˆ e e ıchir la base de donn´es utilis´e par e ehelp.search en utilisant l’option rebuild (help.search(tree, rebuild= TRUE)). La fonction apropos trouve les fonctions qui contiennent dans leur nom lachaˆ de caract`re pass´e en argument ; seuls les packages charg´s en m´moire ıne e e e esont cherch´s : e apropos(help)[1] help .helpForCall help.search[4] help.start 9
  14. 14. 3 Les donn´es avec R e3.1 Les objects Nous avons vu que R manipule des objets : ceux-ci sont caract´ris´s bien e esˆ r par leur nom et leur contenu, mais aussi par des attributs qui vont sp´cifier u ele type de donn´es repr´sent´ par un objet. Afin de comprendre l’utilit´ de ces e e e eattributs, consid´rons une variable qui prendrait les valeurs 1, 2 ou 3 : une telle evariable peut repr´senter une variable enti`re (par exemple, le nombre d’œufs e edans un nid), ou le codage d’une variable cat´gorique (par exemple, le sexe edans certaines populations de crustac´s : mˆle, femelle ou hermaphrodite). e a Il est clair que le traitement statistique de cette variable ne sera pas lemˆme dans les deux cas : avec R, les attributs de l’objet donnent l’information en´cessaire. Plus techniquement, et plus g´n´ralement, l’action d’une fonction e e esur un objet va d´pendre des attributs de celui-ci. e Les objets ont tous deux attributs intrins`ques : le mode et la longueur. eLe mode est le type des ´l´ments d’un objet ; il en existe quatre principaux : eenum´rique, caract`re, complexe7 , et logique (FALSE ou TRUE). D’autres modes e eexistent qui ne repr´sentent pas des donn´es, par exemple fonction ou expres- e esion. La longueur est le nombre d’´l´ments de l’objet. Pour connaˆ le mode ee ıtreet la longueur d’un objet on peut utiliser, respectivement, les fonctions modeet 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 repr´sent´es par NA e e(not available). Une valeur num´rique tr`s grande peut ˆtre sp´cifi´e avec une e e e e enotation exponentielle : N - 2.1e23 N[1] 2.1e+23 7 Le mode complexe ne sera pas discut´ dans ce document. e 10
  15. 15. R repr´sente correctement des valeurs num´riques qui ne sont pas finies, e etelles que ±∞ avec Inf et -Inf, ou des valeurs qui ne sont pas des nombresavec 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 entr´e entre des guillemets doubles e e. Il est possible d’inclure ce dernier caract`re dans la valeur s’il suit un anti- eslash . L’ensemble des deux caract`res sera trait´ de fa¸on sp´cifique par e e c ecertaines fonctions telle que cat pour l’affichage a l’´cran, ou write.table ` epour ´crire sur le disque (p. 16, l’option qmethod de cette fonction). e x - Double quotes delimitate R’s strings. x[1] Double quotes delimitate R’s strings. cat(x)Double quotes delimitate R’s strings. Une autre possibilit´ est de d´limiter les variables de mode caract`re avec e e edes guillemets simples (’) ; dans ce cas il n’est pas n´cessaire d’´chapper e eles guillemets doubles avec des antislash (mais les guillemets simples doiventl’ˆtre !) : e x - ’Double quotes delimitate R’s strings.’ x[1] Double quotes delimitate R’s strings. Le tableau suivant donne un aper¸u des objets repr´sentant des donn´es. c e e 11
  16. 16. objet modes plusieurs modes possibles dans le mˆme objet ? e vecteur num´rique, caract`re, complexe ou e e logique Non facteur num´rique ou caract`re e e Non tableau num´rique, caract`re, complexe ou e e logique Non matrice num´rique, caract`re, complexe ou e e logique Non tableau de num´rique, caract`re, complexe ou e e logique Oui donn´es e ts num´rique, caract`re, complexe ou logique e e Non liste num´rique, caract`re, complexe, logique, e e Oui fonction, expression, . . . Un vecteur est une variable dans le sens g´n´ralement admis. Un facteur e eest une variable cat´gorique. Un tableau (array) poss`de k dimensions, une e e e `matrice ´tant un cas particulier de tableau avec k = 2. A noter que les ´l´ments eed’un tableau ou d’une matrice sont tous du mˆme mode. Un tableau de donn´es e e(data frame) est compos´ de un ou plusieurs vecteurs et/ou facteurs ayant tous ela mˆme longueur mais pouvant ˆtre de modes diff´rents. Un « ts » est un e e ejeu de donn´es de type s´ries temporelles (time series) et comporte donc des e eattributs suppl´mentaires comme la fr´quence et les dates. Enfin, une liste e epeut contenir n’importe quel type d’objet, y compris des listes ! Pour un vecteur, le mode et la longueur suffisent pour d´crire les donn´es. e ePour les autres objets, d’autres informations sont n´cessaires et celles-ci sont edonn´es par les attributs dits non-intrins`ques. Parmi ces attributs, citons dim e equi correspond au nombre de dimensions d’un objet. Par exemple, une matricecompos´e de 2 lignes et 2 colonnes aura pour dim le couple de valeurs [2, 2] ; epar contre sa longueur sera de 4.3.2 Lire des donn´es dans un fichier e Pour les lectures et ´critures dans les fichiers, R utilise le r´pertoire de tra- e evail. Pour connaˆ ce r´pertoire on peut utiliser la commande getwd() (get ıtre eworking directory), et on peut le modifier avec, par exemple, setwd(C:/data)ou setwd(/home/paradis/R). Il est n´cessaire de pr´ciser le chemin d’acc`s e e eau fichier s’il n’est pas dans le r´pertoire de travail. 8 e R peut lire des donn´es stock´es dans des fichiers texte (ASCII) a l’aide e e `des fonctions suivantes : read.table (qui a plusieurs variantes, cf. ci-dessous),scan et read.fwf. R peut ´galement lire des fichiers dans d’autres formats e(Excel, SAS, SPSS, . . .) et acc´der a des bases de donn´es de type SQL, mais e ` eles fonctions n´cessaires ne sont pas dans le package base. Ces fonctionnalit´s e e 8 Sous Windows, il est pratique de cr´er un raccourci de Rgui.exe, puis ´diter ses propri´t´s e e e eet modifier le r´pertoire dans le champ « D´marrer en : » sous l’onglet « Raccourci » : ce e er´pertoire sera ensuite le r´pertoire de travail en d´marrant R depuis ce raccourci. e e e 12
  17. 17. sont tr`s utiles pour une utilisation un peu plus avanc´e de R, mais on se e elimitera ici a la lecture de fichiers au format ASCII. ` La fonction read.table a pour effet de cr´er un tableau de donn´es et est e edonc le moyen principal pour lire des fichiers de donn´es. Par exemple, si on ea un fichier nomm´ data.dat, la commande : e mydata - read.table(data.dat)cr´era un tableau de donn´es nomm´ mydata, et les variables, par d´faut e e e enomm´es V1, V2 . . ., pourront ˆtre acc´d´es individuellement par mydata$V1, e e e emydata$V2, . . ., ou par mydata [V1], mydata[V2], . . ., ou encore parmydata[, 1], mydata[, 2], . . .9 Il y a plusieurs options dont voici les valeurspar d´faut (c’est-`-dire celles utilis´es par R si elles sont omises par l’utilisa- e a eteur) et les d´tails dans le tableau qui suit : eread.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 le nom du fichier (entre ou une variable de mode caract`re), e ´ventuellement avec son chemin d’acc`s (le symbole est interdit et e e doit ˆtre remplac´ par /, mˆme sous Windows), ou un acc`s distant e e e e a un fichier de type URL (http://...) ` header une valeur logique (FALSE ou TRUE) indicant si le fichier contient les noms des variables sur la 1`re ligne e sep le s´parateur de champ dans le fichier, par exemple sep=t si c’est e une tabulation quote les caract`res utilis´s pour citer les variables de mode caract`re e e e dec le caract`re utilis´ pour les d´cimales e e e row.names un vecteur contenant les noms des lignes qui peut ˆtre un vecteur de e mode character, ou le num´ro (ou le nom) d’une variable du fichier e (par d´faut : 1, 2, 3, . . .) e col.names un vecteur contenant les noms des variables (par d´faut : V1, V2, e V3, . . .) as.is contrˆle 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, num´rique ou caract`re pr´cisant les variables conserv´es e e e e en caract`ree na.strings indique la valeur des donn´es manquantes (sera converti en NA) e colClasses un vecteur de caract`res donnant les classes a attribuer aux colonnes e ` nrows le nombre maximum de lignes a lire (les valeurs n´gatives sont ` e ignor´es) e 9 Il y a toutefois une diff´rence : mydata$V1 et mydata[, 1] sont des vecteurs alors que emydata[V1] est un tableau de donn´es. On verra plus loin (p. 20) des d´tails sur la mani- e epulation des objets. 13
  18. 18. skip le nombre de lignes a sauter avant de commencer la lecture des ` donn´es e check.names si TRUE, v´rifie que les noms des variables sont valides pour R e fill si TRUE et que les lignes n’ont pas tous le mˆme nombre de variables, e des “blancs” sont ajout´s e strip.white (conditionnel a sep) si TRUE, efface les espaces (= blancs) avant et ` apr`s les variables de mode caract`re e e blank.lines.skip si TRUE, ignore les lignes « blanches » comment.char un caract`re qui d´finit des commentaires dans le fichier de donn´es, e e e la lecture des donn´es passant a la ligne suivante (pour d´sactiver e ` e cet option, utiliser comment.char = ) Les variantes de read.table sont utiles car elles ont des valeurs par d´faut ediff´rentes : eread.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 flexible que read.table. Une diff´rence est qu’il eest possible de sp´cifier le mode des variables, par exemple : e mydata - scan(data.dat, what = list(, 0, 0))lira dans le fichier data.dat trois variables, la premi`re de mode caract`re et e eles deux suivantes de mode num´rique. Une autre distinction importante est eque scan() peut ˆtre utilis´e pour cr´er diff´rents objets, vecteurs, matrices, e e e etableaux de donn´es, listes, . . . Dans l’exemple ci-dessus, mydata est une liste ede trois vecteurs. Par d´faut, c’est-`-dire si what est omis, scan() cr´e un e a evecteur num´rique. Si les donn´es lues ne correspondent pas au(x) mode(s) e eattendu(s) (par d´faut ou sp´cifi´s par what), un message d’erreur est retourn´. e e e eLes 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
  19. 19. file le nom du fichier (entre ), ´ventuellement avec son chemin d’acc`s e e (le symbole est interdit et doit ˆtre remplac´ par /, mˆme sous e e e Windows), ou un acc`s distant a un fichier de type URL (http://...) ; e ` si file=, les donn´es sont entr´es au clavier (l’entr´e ´tant ter- e e e e min´e par une ligne blanche) e what indique le(s) mode(s) des donn´es lues (num´rique par d´faut) e e e nmax le nombre de donn´es a lire, ou, si what est une liste, le nombre de e ` lignes lues (par d´faut, scan lit jusqu’` la fin du fichier) e a n le nombre de donn´es a lire (par d´faut, pas de limite) e ` e sep le s´parateur de champ dans le fichier e quote les caract`res utilis´s pour citer les variables de mode caract`re e e e dec le caract`re utilis´ pour les d´cimales e e e skip le nombre de lignes a sauter avant de commencer la lecture des ` donn´es e nlines le nombre de lignes a lire ` na.string indique la valeur des donn´es manquantes (sera converti en NA) e flush si TRUE, scan va a la ligne suivante une fois que le nombre de co- ` lonnes est atteint (permet d’ajouter des commentaires dans le fichier de donn´es) e fill si TRUE et que les lignes n’ont pas tous le mˆme nombre de variables, e des “blancs” sont ajout´s e strip.white (conditionnel a sep) si TRUE, efface les espaces (= blancs) avant et ` apr`s les variables de mode character e quiet si FALSE, scan affiche une ligne indiquant quels champs ont ´t´ lus e e blank.lines.skip si TRUE, ignore les lignes « blanches » multi.line si what est une liste, pr´cise si les variables du mˆme individu sont e e sur une seule ligne dans le fichier (FALSE) comment.char un caract`re qui d´finit des commentaires dans le fichier de donn´es, e e e la lecture des donn´es passant a la ligne suivante (par d´faut les e ` e commentaires ne sont pas permis) allowEscapes sp´cifie si les caract`res ´chapp´s (par ex. t) doivent ˆtre interpr´t´s e e e e e e e (le d´faut) ou laiss´s tels-quels e e La fonction read.fwf sert a lire dans un fichier o` les donn´es sont dans ` u eun format a largeur fix´e (fixed width format) : ` eread.fwf(file, widths, header = FALSE, sep = t, as.is = FALSE, skip = 0, row.names, col.names, n = -1, buffersize = 2000, ...)Les options sont les mˆmes que pour read.table() sauf e A1.501.2widths qui sp´cifie la largeur des champs (buffersize e A1.551.3est le nombre maximum de lignes lues en mˆme temps). e B1.601.4Par exemple, si on a un fichier nomm´ data.txt dont le e B1.651.5contenu est indiqu´ ci-contre, on pourra lire les donn´es e e C1.701.6avec la commande suivante : C1.751.7 mydata - read.fwf(data.txt, widths=c(1, 4, 3)) mydata V1 V2 V31 A 1.50 1.2 15
  20. 20. 2 A 1.55 1.33 B 1.60 1.44 B 1.65 1.55 C 1.70 1.66 C 1.75 1.73.3 Enregistrer les donn´es e La fonction write.table ´crit dans un fichier un objet, typiquement un etableau de donn´es mais cela peut tr`s bien ˆtre un autre type d’objet (vecteur, e e ematrice, . . .). 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 le nom de l’objet a ´crire `e file le nom du fichier (par d´faut l’objet est affich´ a l’´cran) e e` e append si TRUE ajoute les donn´es sans effacer celles ´ventuellement existantes dans e e le fichier quote une variable logique ou un vecteur num´rique : si TRUE les variables de e mode caract`re et les facteurs sont ´crits entre , sinon le vecteur indique e e les num´ros des variables a ´crire entre (dans les deux cas les noms des e `e variables sont ´crits entre mais pas si quote = FALSE) e sep le s´parateur de champ dans le fichier e eol le caract`re imprim´ a la fin de chaque ligne (n correspond a un retour- e e` ` charriot) na indique le caract`re utilis´ pour les donn´es manquantes e e e dec le caract`re utilis´ pour les d´cimales e e e row.names une variable logique indiquant si les noms des lignes doivent ˆtre ´crits e e dans le fichier col.names idem pour les noms des colonnes qmethod sp´cifie, si quote=TRUE, comment sont trait´es les guillemets doubles in- e e cluses dans les variables de mode caract`re : si escape (ou e, le d´faut) e e chaque est remplac´e par , si d chaque est remplac´e par e e Pour ´crire de fa¸on plus simple un objet dans un fichier, on peut utiliser e cla commande write(x, file=data.txt) o` x est le nom de l’objet (qui upeut ˆtre un vecteur, une matrice ou un tableau). Il y a deux options : nc (ou encol) qui d´finit le nombre de colonnes dans le fichier (par d´faut nc=1 si x est e ede mode caract`re, nc=5 pour les autres modes), et append (un logique) pour eajouter les donn´es sans effacer celles ´ventuellement d´j` existantes dans le e e eafichier (TRUE) ou les effacer si le fichier existe d´j` (FALSE, le d´faut). ea e Pour enregistrer des objets, cette fois de n’importe quel type, on utiliserala commande save(x, y, z, file=xyz.RData). Pour faciliter l’´change ede fichiers entre machines et syst`mes d’exploitation, on peut utiliser l’option eascii=TRUE. Les donn´es (qui sont alors nomm´es workspace dans le jargon de e e 16
  21. 21. R) peuvent ult´rieurement ˆtre charg´es en m´moire avec load(xyz.RData). e e e eLa fonction save.image est un raccourci pour save(list=ls (all=TRUE),file=.RData).3.4 G´n´rer des donn´es e e e3.4.1 S´quences r´guli`res e e e Une s´quence r´guli`re de nombres entiers, par exemple de 1 a 30, peut e e e `ˆtre g´n´r´e par :e e ee x - 1:30On a ainsi un vecteur x avec 30 ´l´ments. Cet op´rateur ‘:’ est prioritaire sur ee eles op´rations arithm´tiques au sein d’une 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 g´n´rer des s´quences de nombres r´els de la mani`re e e e e esuivante : seq(1, 5, 0.5)[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0o` le premier nombre indique le d´but de la s´quence, le second la fin, et le u e etroisi`me l’incr´ment utilis´ dans la progression de la s´quence. On peut aussi e e e eutiliser : 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 d´sir´es en utilisant la fonction e ec: 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 l’on veut taper des donn´es au clavier d’utiliser la efonction scan avec tout simplement les options par d´faut : e z - scan()1: 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.010:Read 9 items z[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 17
  22. 22. La fonction rep cr´e un vecteur qui aura tous ses ´l´ments 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 cr´er une suite de s´quences de nombres entiers e equi chacune se termine par les nombres donn´s 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 7 8 9 10 1 2 3 4 5 La fonction gl (generate levels) est tr`s utile car elle g´n`re des s´ries e e e er´guli`res dans un facteur. Cette fonction s’utilise ainsi gl(k, n) o` k est le e e unombre de niveaux (ou classes) du facteur, et n est le nombre de r´plications epour chaque niveau. Deux options peuvent ˆtre utilis´es : length pour sp´cifier e e ele nombre de donn´es produites, et labels pour indiquer les noms des niveaux edu facteur. Exemples : gl(3, 5) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3Levels: 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 3Levels: 1 2 3 gl(2, 6, label=c(Male, Female)) [1] Male Male Male Male Male Male [7] Female Female Female Female Female FemaleLevels: 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 2Levels: 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 2Levels: 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 2Levels: 1 2 Enfin, expand.grid() sert a cr´er un tableau de donn´es avec toutes les ` e ecombinaisons des vecteurs ou facteurs donn´s comme arguments : e expand.grid(h=c(60,80), w=c(100, 300), sex=c(Male, Female)) h w sex1 60 100 Male 18
  23. 23. 2 80 100 Male3 60 300 Male4 80 300 Male5 60 100 Female6 80 100 Female7 60 300 Female8 80 300 Female3.4.2 S´quences al´atoires e e Il est utile en statistique de pouvoir g´n´rer des donn´es al´atoires, et R e e e epeut le faire pour un grand nombre de fonctions de densit´ de probabilit´. Ces e efonctions sont de la forme rfunc (n, p1, p2, ...), o` func indique la loi de uprobabilit´, n le nombre de donn´es g´n´r´es et p1, p2, . . . sont les valeurs des e e e eeparam`tres de la loi. Le tableau suivant donne les d´tails pour chaque loi, et e eles ´ventuelles valeurs par d´faut (si aucune valeur par d´faut n’est indiqu´e, e e e ec’est que le param`tre doit ˆtre sp´cifi´). e e e e loi fonction Gauss (normale) rnorm(n, mean=0, sd=1) exponentielle rexp(n, rate=1) gamma rgamma(n, shape, scale=1) Poisson rpois(n, lambda) Weibull rweibull(n, shape, scale=1) Cauchy rcauchy(n, location=0, scale=1) beta rbeta(n, shape1, shape2) ‘Student’ (t) rt(n, df) Fisher–Snedecor (F ) rf(n, df1, df2) Pearson (χ2 ) rchisq(n, df) binomiale rbinom(n, size, prob) multinomiale rmultinom(n, size, prob) g´om´trique e e rgeom(n, prob) hyperg´om´trique e e rhyper(nn, m, n, k) logistique rlogis(n, location=0, scale=1) lognormale rlnorm(n, meanlog=0, sdlog=1) binomiale n´gative e rnbinom(n, size, prob) uniforme runif(n, min=0, max=1) statistiques de Wilcoxon rwilcox(nn, m, n), rsignrank(nn, n) La plupart de ces fonctions ont des compagnes obtenues en rempla¸ant cla lettre r par d, p ou q pour obtenir, dans l’ordre, la densit´ de probabilit´ e e(dfunc (x, ...)), la densit´ de probabilit´ cumul´e (pfunc (x, ...)), et la e e evaleur de quantile (qfunc (p, ...), avec 0 p 1). Les deux derni`res s´ries de fonctions peuvent ˆtre utilis´es pour trouver e e e eles valeurs critiques ou les valeurs de P de tests statistiques. Par exemple, les 19
  24. 24. valeurs critiques au seuil de 5% pour un test bilat´ral suivant une loi normale esont : qnorm(0.025)[1] -1.959964 qnorm(0.975)[1] 1.959964Pour la version unilat´rale de ce test, qnorm(0.05) ou 1 - qnorm(0.95) sera eutilis´ d´pendant de la forme de l’hypoth`se alternative. e e e La valeur de P d’un test, disons χ 2 = 3.84 avec ddl = 1, est : 1 - pchisq(3.84, 1)[1] 0.050043523.5 Manipuler les objets3.5.1 Cr´ation d’objets e On a vu diff´rentes fa¸ons de cr´er des objets en utilisant l’op´rateur assi- e c e egner ; le mode et le type de l’objet ainsi cr´´ sont g´n´ralement d´termin´s de ee e e e efa¸on implicite. Il est possible de cr´er un objet en pr´cisant de fa¸on explicite c e e cson mode, sa longueur, son type, etc. Cette approche est int´ressante dans el’id´e de manipuler les objets. On peut, par exemple, cr´er un vecteur ‘vide’ e epuis modifier successivement ses ´l´ments, ce qui est beaucoup plus efficace eeque de rassembler ces ´l´ments avec c(). On utilisera alors l’indexation comme eeon le verra plus loin (p. 28). Il peut ˆtre aussi extrˆment pratique de cr´er des objets a partir d’autres e e e `objets. Par exemple, si l’on veut ajuster une s´rie de mod`les, il sera commode e ede mettre les formules correspondantes dans une liste puis d’extraire succes-sivement chaque ´l´ment de celle-ci qui sera ensuite ins´r´ dans la fonction ee eelm. ` A ce point de notre apprentissage de R, l’int´rˆt d’aborder les fonction- eenalit´s qui suivent n’est pas seulement pratique mais aussi didactique. La econstruction explicite d’objets permet de mieux comprendre leur structure etd’approfondir certaines notions vues pr´c´demment. e eVecteur. La fonction vector, qui a deux arguments mode et length, va ser- vir a cr´er un vecteur dont la valeur des ´l´ments sera fonction du mode ` e ee sp´cifi´ : 0 si num´rique, FALSE si logique, ou si caract`re. Les fonc- e e e e tions suivantes ont exactement le mˆme effet et ont pour seul argument e la longueur du vecteur cr´´ : numeric(), logical(), et character(). eeFacteur. Un facteur inclue non seulement les valeurs de la variable cat´gorique e correspondante mais aussi les diff´rents niveaux possibles de cette va- e riable (mˆme ceux qui ne sont pas repr´sent´s dans les donn´es). La e e e e fonction factor cr´e un facteur avec les options suivantes : e 20
  25. 25. factor(x, levels = sort(unique(x), na.last = TRUE), labels = levels, exclude = NA, ordered = is.ordered(x)) levels sp´cifie quels sont les niveaux possibles du facteur (par d´faut e e les valeurs uniques du vecteur x), labels d´finit les noms des niveaux, e exclude les valeurs de x a ne pas inclure dans les niveaux, et ordered ` est un argument logique sp´cifiant si les niveaux du facteur sont or- e donn´s. Rappelons que x est de mode num´rique ou caract`re. En guise e e e d’exemples : 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 d’un facteur : ` ff - factor(c(2, 4), levels=2:5) ff [1] 2 4 Levels: 2 3 4 5 levels(ff) [1] 2 3 4 5Matrice. Une matrice est en fait un vecteur qui poss`de un argument suppl´- e e mentaire (dim) qui est lui-mˆme un vecteur num´rique de longueur 2 et e e qui d´finit les nombres de lignes et de colonnes de la matrice. Une matrice e peut ˆtre cr´´e avec la fonction matrix : e ee matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) L’option byrow indique si les valeurs donn´es par data doivent remplir e successivement les colonnes (le d´faut) ou les lignes (si TRUE). L’option 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
  26. 26. [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 fa¸on de cr´er une matrice est de donner les valeurs voulues c e a l’attribut dim d’un vecteur (attribut qui est initialement NULL) : ` x - 1:15 x [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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 15Tableau de donn´es. On a vu qu’un tableau de donn´es est cr´´ de fa¸on e e ee c implicite par la fonction read.table ; on peut ´galement cr´er un ta- e e bleau de donn´es avec la fonction data.frame. Les vecteurs inclus dans e le tableau doivent ˆtre de mˆme longueur, ou si un de ces ´l´ments 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 donn´es, il doit ˆtre de mˆme e e e longueur que le(s) vecteur(s). Il est possible de changer les noms des 22
  27. 27. colonnes avec, par exemple, data.frame(A1=x, A2=n). On peut aussi donner des noms aux lignes avec l’option 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 donn´es. Enfin, notons que les tableaux de donn´es e e ont un attribut dim de la mˆme fa¸on que les matrices. e cListe. Une liste est cr´´e de la mˆme fa¸on qu’un tableau de donn´es avec la ee e c e fonction list. Il n’y a aucune contrainte sur les objets qui y sont inclus. ` A la diff´rence de data.frame(), les noms des objets ne sont pas repris e par d´faut ; en reprenant les vecteurs x et y de l’exemple pr´c´dant : 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 BS´rie temporelle. La fonction ts va cr´er un objet de classe ts a partir e e ` d’un vecteur (s´rie temporelle simple) ou d’une matrice (s´rie temporelle e e multiple), et des options qui caract´risent la s´rie. Les options, avec les e e valeurs par d´faut, sont : e ts(data = NA, start = 1, end = numeric(0), frequency = 1, deltat = 1, ts.eps = getOption(ts.eps), class, names) data un vecteur ou une matrice start le temps de la 1`re observation, soit un nombre, ou soit e un vecteur de deux entiers (cf. les exemples ci-dessous) end le temps de la derni`re observation sp´cifi´ de la mˆme e e e e fa¸on que start c frequency nombre d’observations par unit´ de temps e deltat la fraction de la p´riode d’´chantillonnage entre observa- e e tions successives (ex. 1/12 pour des donn´es mensuelles) ; e seulement un de frequency ou deltat doit ˆtre pr´cis´ e e e 23
  28. 28. ts.eps tol´rance pour la comparaison de s´ries. Les fr´quences e e e sont consid´r´es ´gales si leur diff´rence est inf´rieure a ee e e e ` ts.eps class classe a donner a l’objet ; le d´faut est ts pour une ` ` e s´rie simple, et c(mts, ts) pour une s´rie multiple e e names un vecteur de mode caract`re avec les noms des s´ries e e individuelles dans le cas d’une s´rie multiple ; par d´faut e e les noms des colonnes de data, ou Series 1, Series 2, etc. Quelques exemples de cr´ation de s´ries 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 2Expression. Les objets de mode expression ont un rˆle 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
  29. 29. tap´e directement au clavier, elle est alors ´valu´e par R qui l’ex´cute e e e e si elle est valide. Dans bien des circonstances, il est utile de construire une expression sans l’´valuer : c’est le rˆle de la fonction expression. e o On pourra, bien sˆ r, ´valuer l’expression ult´rieurement 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 graphiques (p. 44). Une expression peut ˆtre cr´´e a partir d’une variable e ee ` de mode caract`re. Certaines fonctions utilisent des expressions en tant e qu’argument, par exemple D qui calcule des d´riv´es 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))^23.5.2 Conversion d’objets Le lecteur aura sˆ rement r´alis´ que les diff´rences entre certains objets u e e esont parfois minces ; il est donc logique de pouvoir convertir un objet en unautre en changeant certains de ces attributs. Une telle conversion sera effectu´eeavec une fonction du genre as.something . R (version 2.1.0) comporte, dansles packages base et utils, 98 de ces fonctions, aussi nous ne rentrerons pas dansles d´tails ici. e Le r´sultat d’une conversion d´pend bien sˆ r des attributs de l’objet con- e e uverti. En g´n´ral, la conversion suit des r`gles intuitives. Pour les conversions e e ede modes, le tableau suivant r´sume la situation. e 25
  30. 30. Conversion en Fonction R`gles e num´rique e as.numeric FALSE → 0 TRUE → 1 1, 2, . . . → 1, 2, . . . A, . . . → NA logique as.logical 0→ FALSE autres nombres → TRUE FALSE, F → FALSE TRUE, T → TRUE autres caract`res → e NA caract`re e as.character 1, 2, . . . → 1, 2, . . . FALSE → FALSE TRUE → TRUE Il existe des fonctions pour convertir les types d’objets (as.matrix, as.ts,as.data.frame, as.expression, . . .). Ces fonctions vont agir sur des at-tributs autres que le mode pour la conversion. L` encore les r´sultats sont a eg´n´ralement intuitifs. Une situation fr´quemment rencontr´e est la conver- e e e esion de facteur en vecteur num´rique. Dans ce cas, R convertit avec le codage enum´rique des niveaux du facteur : e fac - factor(c(1, 10)) fac[1] 1 10Levels: 1 10 as.numeric(fac)[1] 1 2 Cela est logique si l’on consid`re un facteur de mode caract`re : e e fac2 - factor(c(Male, Female)) fac2[1] Male FemaleLevels: Female Male as.numeric(fac2)[1] 2 1 Notez que le r´sultat n’est pas NA comme on aurait pu s’attendre d’apr`s e ele tableau ci-dessus. Pour convertir un facteur de mode num´rique en conservant les niveaux etels qu’ils sont sp´cifi´s, on convertira d’abord en caract`re puis en num´rique. e e e e as.numeric(as.character(fac))[1] 1 10 Cette proc´dure est tr`s utile si, dans un fichier, une variable num´rique e e econtient (pour une raison ou une autre) ´galement des valeurs non-num´riques. e eOn a vu que read.table() dans ce genre de situation va, par d´faut, lire cette ecolonne comme un facteur. 26
  31. 31. 3.5.3 Les op´rateurs e Nous avons vu pr´c´demment qu’il y a trois principaux types d’op´rateurs e e edans R10 . En voici la liste. Op´rateurs e Arithm´tique e Comparaison Logique + addition inf´rieur a e ` ! x NON logique - soustraction sup´rieur a e ` x y ET logique * multiplication = inf´rieur ou ´gal a e e ` x y idem / division = sup´rieur ou ´gal a e e ` x | y OU logique ^ puissance == ´gal e x || y idem %% modulo != diff´rent e xor(x, y) OU exclusif %/% division enti`re e Les op´rateurs arithm´tiques ou de comparaison agissent sur deux ´l´ments e e ee(x + y, a b). Les op´rateurs arithm´tiques agissent non seulement sur les e evariables de mode num´rique ou complexe, mais aussi sur celles de mode elogique ; dans ce dernier cas, les valeurs logiques sont converties en valeursnum´riques. Les op´rateurs de comparaison peuvent s’appliquer a n’importe e e `quel mode : ils retournent une ou plusieurs valeurs logiques. Les op´rateurs logiques s’appliquent a un (!) ou deux objets de mode lo- e `gique et retournent une (ou plusieurs) valeurs logiques. Les op´rateurs « ET » eet « OU » existent sous deux formes : la forme simple op´re sur chaque e´l´ment des objets et retourne autant de valeurs logiques que de comparai-eesons effectu´es ; la forme double op´re sur le premier ´l´ment des objets. e e ee On utilisera l’op´rateur « ET » pour sp´cifier une in´galit´ du type 0 x e e e e1 qui sera cod´e ainsi : 0 x x 1. L’expression 0 x 1 est valide mais ene donnera pas le r´sultat escompt´ : les deux op´rateurs de cette expression e e e´tant identiques, ils seront ex´cut´s successivement de la gauche vers la droite.e e eL’op´ration 0 x sera d’abord r´alis´e retournant une valeur logique qui sera e e eensuite compar´e a 1 (TRUE ou FALSE 1) : dans ce cas la valeur logique sera e `convertie implicitement en num´rique (1 ou 0 1). e x - 0.5 0 x 1[1] FALSE Les op´rateurs de comparaison op`rent sur chaque ´l´ment des deux ob- e e eejets qui sont compar´s (en recyclant ´ventuellement les valeurs si l’un est plus e ecourt), et retournent donc un objet de mˆme taille. Pour effectuer une compa- eraison « globale » de deux objets, deux fonctions sont disponibles : identicalet all.equal. 10 Les caract`res suivants sont en fait aussi des op´rateurs pour R : $, @, [, [[, :, ?, -, -, e e=, ::. Un tableau des op´rateurs d´crivant les r`gles de priorit´ peut ˆtre trouv´ avec ?Syntax. e e e e e e 27
  32. 32. 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 repr´sentation interne des donn´es et retourne TRUE e esi les objets sont strictement identiques, sinon FALSE. all.equal compare« l’´galit´ approximative » des deux objets, et retourne TRUE ou affiche un e er´sum´ des diff´rences. Cette derni`re fonction prend en compte l’approxima- e e e etion des calculs dans la comparaison des valeurs num´riques. La comparaison ede valeurs num´riques 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-163.5.4 Acc´der aux valeurs d’un objet : le syst`me d’indexation e e L’indexation est un moyen efficace et flexible d’acc´der de fa¸on s´lective e c eaux ´l´ments d’un objet ; elle peut ˆtre num´rique ou logique. Pour acc´der a, ee e e e `par exemple, la 3`me valeur d’un vecteur x, on tape x[3] qui peut ˆtre utilis´ e e eaussi bien pour extraire ou changer cette valeur : x - 1:5 x[3][1] 3 x[3] - 20 x[1] 1 2 20 4 5 L’indice lui-mˆme peut ˆtre un vecteur de mode num´rique : e e e i - c(1, 3) 28

×