Programmer en R. Une brève introduction. Thomas Girke. Translated and augmented by Stéfane Paris. Programmer en R Slide 1/83

Dimension: px
Commencer à balayer dès la page:

Download "Programmer en R. Une brève introduction. Thomas Girke. Translated and augmented by Stéfane Paris. Programmer en R Slide 1/83"

Transcription

1 Programmer en R Une brève introduction Thomas Girke Translated and augmented by Stéfane Paris Programmer en R Slide 1/83

2 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R Slide 2/83

3 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R Programmer en R Slide 3/83

4 Pourquoi Programmer en R? Un environnement statistique complet et un langage de programmation Une recherche reproductible Des structures de données efficaces Une mise en œuvre aisée de fonctions personnalisées Des outils graphiques complets et faciles d utilisation L accès à nombre toujours croissant d outils d analyse Le langage le plus largement utilisé en bio-informatique Une norme pour l extraction et l analyse de données biostatistiques Les avantages techniques : gratuit, code libre, multi-plateforme Programmer en R Programmer en R Slide 4/83

5 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R Les objets Slide 5/83

6 Vue d ensemble des objets Affectation et types de bases ; Vecteur (vector) est l objet élémentaire. Matrice (matrix) étend la notion de vecteur à 2 dimensions ; Tabeau (array) étend la notion de matrice à n dimensions ; Liste (list) est similaire aux listes de la programmation fonctionnelles (cf. Lisp) Structure (data.frame) est un objet spécifique de R dédié au stockage de données à analyser (cf. analyse de données) Programmer en R Les objets Slide 6/83

7 Affectation et types de base L affectation se fait avec le symbole <-. Les types de base sont : Entier, Réel : la constante pi, Complexes : l imaginaire pur i, les fonctions Caractères et chaînes de caractères sont encadrés par des quotes ( ) ou par des doubles quotes ("), Booléens : FALSE (abréviation F) et TRUE (abréviation T) Il n y a pas de déclaration de vartiable ; la première affectation définit la variable (et son type courant) Programmer en R Les objets Slide 7/83

8 Affectation et types de base : Exemples > (omega<-2*pi*22054) [1] > (sinc <- sin(omega)/omega) [1] e-17 > sqrt(16) [1] 4 > ls() [1] "omega" "sinc" > ls.str() omega : num sinc : num 6.35e-17 Programmer en R Les objets Slide 8/83

9 Affectation et types de base : Exemples > (sinc <- "sinus cardinal") [1] "sinus cardinal" > ls.str() omega : num sinc : chr "sinus cardinal" > rm(omega) > ls.str() sinc : chr "sinus cardinal" Programmer en R Les objets Slide 9/83

10 Vecteurs Une collection d éléments de même mode/type/nature ; La structure informatique sousjacente est un tableau à une dimension ; Un vecteur peut être : Numérique (numerical vector) si son mode est réel ; Logique (logical vector) si son mode est booléen ; Alphanumérique (character vector) si son mode est chaîne de caractères ; Programmer en R Les objets Slide 10/83

11 Vecteurs c(élément1, élément2,... ) crée un vecteur et l initialise avec les valeurs fournies en argument Exemple > (m <- c( 1, 2, 4, -1 )) [1] > (p <- c( 1, 4.5, 6, pi )) [1] Programmer en R Les objets Slide 11/83

12 Vecteurs numeric(length) crée un vecteur de length(>0) éléments à valeurs 0 Exemple > (n <- numeric(5)) [1] Programmer en R Les objets Slide 12/83

13 Vecteurs logical(length) crée un vecteur de length (>0) éléments à valeur FALSE Exemple > (b <- logical(3)) [1] FALSE FALSE FALSE Programmer en R Les objets Slide 13/83

14 Vecteurs character(length) crée un vecteur de length (>0) éléments à valeur "" Exemple > (s <- character(4)) [1] "" "" "" "" Programmer en R Les objets Slide 14/83

15 Vecteurs Exemples i:j crée un vecteur commençant à i, allant jusqu à j avec un pas de 1 ; seq (i,j,k) crée un vecteur commençant à i, allant jusqu à j avec un pas de k ; length(m) indique la taille du vecteur m. > (n <- 1.2:5.3) [1] > (m <- seq(1.2, 5.3, 0.4)) [1] > (lg <- length(m)) [1] 11 Programmer en R Les objets Slide 15/83

16 Vecteurs Exemples La consultation et la modification se fait à l aide des crochets [ ] pour des indices commençant à 1. les indices peuvent être des intervalles ; Quand rien n est indiqué, l intervalle correspond à tout le vecteur. > (m <- seq(1.2, 5.3, 0.4)) [1] > m[(lg-3):lg] [1] > m[lg-3:lg] [1] > m[4] <- 6.5 > m [1] > m[ ] [1] Programmer en R Les objets Slide 16/83

17 Vecteurs : Exemples > (n <- 10) [1] 10 > (m <- seq(1.2, 5.3, 0.4)) [1] > (z <- n*m) [1] > names(z) <- c("un","deux","trois","quatre","cinq", + "Six","Sept","Huit","Neuf","Dix","Onze") > z[c("un","six","onze")] Un Six Onze Programmer en R Les objets Slide 17/83

18 Vecteurs : Exemples > (m <- seq(1.2, 5.3, 0.4)) [1] > m<3 [1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE > m[m<3] <- m[m<3]+100 > m [1] > m <- m[m<100]-100 > m [1] Programmer en R Les objets Slide 18/83

19 Matrices Exemples matrix(data, nblignes, nbcolonnes) crée une matrice à partir de données fournies en argument ; t(m) transpose la matrice m. > (m <- matrix(1:15,3,5)) [,1] [,2] [,3] [,4] [,5] [1,] [2,] [3,] > (m <- t(matrix(1:15,5,3))) [,1] [,2] [,3] [,4] [,5] [1,] [2,] [3,] Programmer en R Les objets Slide 19/83

20 Tableaux Exemples > (t1 <- array(1:4, c(2,4,2))),, 1 [,1] [,2] [,3] [,4] [1,] [2,] ,, 2 [,1] [,2] [,3] [,4] [1,] [2,] Une extension des matrices Programmer en R Les objets Slide 20/83

21 Tableaux : Exemples > dim(t1) [1] > is.array(letters) [1] FALSE > dim(as.array(letters)) [1] 26 Programmer en R Les objets Slide 21/83

22 Tableaux : Exemples > (t2 <- array(1:4, c(4,2,2))),, 1 [,1] [,2] [1,] 1 1 [2,] 2 2 [3,] 3 3 [4,] 4 4,, 2 [,1] [,2] [1,] 1 1 [2,] 2 2 [3,] 3 3 [4,] 4 4 > t(t2[,,1]) [,1] [,2] [,3] [,4] [1,] [2,] Programmer en R Les objets Slide 22/83

23 Tabelaux : Exemples > t3<-array(0,c(2,4,2)) > t3[,,1] <- t(t2[,,1]) > t3,, 1 [,1] [,2] [,3] [,4] [1,] [2,] ,, 2 [,1] [,2] [,3] [,4] [1,] [2,] Programmer en R Les objets Slide 23/83

24 Listes Une collection ordonnée d objets hétérogènes ; Permet aux fonctions de renvoyer plusieurs résultats de modes différents ; list(élément1, élément2,...) construit une liste constituée des éléments fournis en argument en respectant l ordre des arguments ; L accés aux éléments se fait à l aide des doubles crochets [[...]] ou bien à l aide des noms des éléments précédés par le signe $. Programmer en R Les objets Slide 24/83

25 Listes : Exemples > liste <- list(attribut1=1:5, attribut2=seq(1.2, 5.3, 0.4), + noms=c("samuel","laila","ibrahim","marcelle")) > liste[[1]] [1] > liste$attribut2[5] [1] 2.8 > mode(liste$attribut1) [1] "numeric" > mode(liste$attribut2) [1] "numeric" > mode(liste$noms) [1] "character" Programmer en R Les objets Slide 25/83

26 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R Instructions de contrôle Slide 26/83

27 Vue d ensemble des principaux opérateurs Opérateurs relationnels == (égalité)!= (différence) > (strictement plus grand que) >= (plus grand que) < (strictement plus petit que) <= (plus petit que) Opérateurs logiques & (et conjonction) (ou disjonction)! (non négation) Programmer en R Instructions de contrôle Slide 27/83

28 Instruction conditionnelle if Une instruction if fonctionne avec les expressions booléennes uniquement. Syntaxe > if(true) { + statements_1 + } else { + statements_2 + } Exemple > if(1==0) { + print(1) + } else { + print(2) + } [1] 2 Programmer en R Instructions de contrôle Slide 28/83

29 Instruction conditionnelle ifelse Une instruction ifelse fonctionne avec les vecteurs. Syntaxe > ifelse(test, true_value, false_value) Exemple > x <- 1:10 > ifelse(x<5, x, 0) [1] Programmer en R Instructions de contrôle Slide 29/83

30 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R Instructions itératives boucles Slide 30/83

31 La boucle for Itère sur les composants du vecteur de boucle. Syntaxe > for(variable in sequence) { + statements + } iris est une base de 150 données (en lignes) chacune décrite par 5 variables (en colonnes) qui sont : Sepal.Length, Sepal.Width, Petal.Length, Petal.Width, Species. Programmer en R Instructions itératives boucles Slide 31/83

32 La boucle for Exemple > mydf <- iris > myve <- NULL > for(i in seq(along=mydf[,1])) { + myve <- c(myve, mean(as.numeric(mydf[i,1:3]))) + } > myve[1:8] [1] Modifier par affectation des objets est bien plus rapide qu opérer des concaténations avec les instructions c, cbind, etc. > myve <- numeric(length(mydf[,1])) > for(i in seq(along=myve)) { + myve[i] <- mean(as.numeric(mydf[i,1:3])) + } > myve[1:8] [1] Programmer en R Instructions itératives boucles Slide 32/83

33 Instruction d arrêt conditionnel de boucle La fonction stop est utilisée pour sortir d une boucle (ou d une fonction) quand une condition (i.e. un état des objets) est vérifiée (devient TRUE) et affiche un message d erreur. Exemple > x <- 1:10 > z <- NULL > for(i in seq(along=x)) { + if(x[i] < 5) { + z <- c(z, x[i]-1) + } else { + stop("values need to be <5") + } + } Programmer en R Instructions itératives boucles Slide 33/83

34 La boucle while Itère tant que sa condition est vérifiée. Syntaxe > while(condition) { + statements + } Exemple > z <- 0 > while(z<5) { + z <- z print(z) + } [1] 2 [1] 4 [1] 6 Programmer en R Instructions itératives boucles Slide 34/83

35 La famille des fonctionnelles apply : apply Syntaxe > apply(x, MARGIN, FUN, ARGs) Arguments de la fonction FUN Exemple X : array, y compris les matrices ; MARGIN : 1 pour les lignes, 2 pour les colonnes c(1, 2) pour les lignes et les colonnes, etc. FUN : une ou plusieurs fonctions ; ARGs : les arguments supplémentaires des fonctions (FUN) si besoin > apply(iris[1:8,1:3], 1, mean) Programmer en R Instructions itératives boucles Slide 35/83

36 La famille des fonctionnelles apply : tapply Exécute une fonction sur les composants d un vecteur définis par un même attribut. Syntaxe > tapply(vector, factor, FUN) Exemple > iris[c(1, 51, 101),] Sepal.Length Sepal.Width Petal.Length Petal.Width Species setosa versicolor virginica > tapply(iris$sepal.length, iris$species, mean) setosa versicolor virginica Programmer en R Instructions itératives boucles Slide 36/83

37 La famille des fonctionnelles apply : sapply et lapply Les deux fonctionnelles appliquent une fonction à un vecteur ou à une liste d objets. La fonction lapply retourne toujours un objet de type liste, tandis que sapply tente de renvoyer un vecteur ou une matrice d objets quand c est possible. Exemples > x <- list(a = 1:10, beta = exp(-3:3), logic = c(true,false,false,true)) > lapply(x, mean) $a [1] 5.5 $beta [1] $logic [1] 0.5 > sapply(x, mean) a beta logic Souvent utilisé avec des fonctions anonymes > lapply(names(x), function(x) mean(x)) > sapply(names(x), function(x) mean(x)) Programmer en R Instructions itératives boucles Slide 37/83

38 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R Fonctions Slide 38/83

39 Vue d ensemble des Fonctions Le langage R permet d augmenter l ensemble des fonctions prédéfinies et d écrire aisément ses propres fonctions. En fait, Une grande partie de l interprète R peut être vu comme une collection de fonctions R. Syntaxe de définition d une fonction > myfct <- function(arg1, arg2,...) { + function_body + } Syntaxe d appel d une fonction > myfct(arg1=..., arg2=...) Programmer en R Fonctions Slide 39/83

40 Les règles de construction d une définition de fonction Principe Les fonctions sont définis par (1) affectation avec le mot-clef function, (2) la déclaration de paramètres formels (arguments) (arg1, arg2,...) et (3) la définition des instructions (function_body) qui effectuent les traitements sur les arguments. Un nom de fonction doit être attribué pour appeler la fonction. Nommage Les noms des fonctions peuvent être presque n importe quoi. Cependant, l utilisation de noms de fonctions déjà existantes doit être évitée. Arguments Il est souvent utile de fournir des valeurs par défaut aux arguments d une fonction (par exemple : arg1=1:10). Ils n ont alors pas besoin d être fourni lors d un appel de cette fonction. La liste des arguments peut aussi être laissée vide (myfct <- function() fct_body ) quand cette fonction retourne toujours la(les) même(s) valeur(s). L argument... est utilisé afin de transmettre à une autre fonction la liste des arguments. Corps Les instructions/commandes sont définies dans le corps de la fonction délimité par des accolades. Elles sont séparées les unes des autres par un point-virgule (;) ou par une nouvelle ligne (méthode recommandée). Utilisation Les fonctions sont appelées par leurs noms suivi de parenthèses entre lesquelles se trouvent les argumets (paramètres effectifs). Des parenthèses vides après le nom de la fonction provoquera un message d erreur si la fonction requiert un ou plusieurs arguments losr de l appel. Le nom de la fonction tout seul affichera la définition de la fonction. Portée Les variables créées au sein d une fonction n existe que le temps d un appel à cette fonction ; elles ne sont donc pas accessible en dehors de cette fonction. Pour rendre des variables d une fonction globales (de portées globales) il faut utiliser l opérateur de double affectation : <<. Programmer en R Fonctions Slide 40/83

41 Fonction : Exemples Définition d une fonction > myfct <- function(x1, x2=5) { + z1 <- x1 / x1 + z2 <- x2 * x2 + myvec <- c(z1, z2) + return(myvec) + } Appel d une fonction > myfct(x1=2, x2=5) ## Appelle la fonction myfct avec les valeurs 2 et 5 [1] 1 25 > myfct(2, 5) ## Appelle sans nommage des param^etres [1] 1 25 > myfct(x1=2) ## Appelle avec la valeur par défaut 5 pour x2 [1] 1 25 > myfct ## Affiche la définition de la fonction function(x1, x2=5) { z1 <- x1 / x1 z2 <- x2 * x2 myvec <- c(z1, z2) return(myvec) } Programmer en R Fonctions Slide 41/83

42 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R Outils pratiques Slide 42/83

43 Outils de débogage Plusieurs outils de débogage sont disponibles avec R. Ils comprennent: traceback browser options(error=recover) options(error=null) debug Pour l aide sur le débogage, les R pages Link d ensemble des outils disponibles. fournissent une vue Programmer en R Outils pratiques Slide 43/83

44 Expressions Régulières Les expressions régulières fonctionnent comme dans un autre langage. Pour apprendre à les utiliser dans R, on peut consulter la page d aide principale sur ce sujet avec?regexp Exemples > ## grep peut ^etre utilisée pour trouver des motifs dans des cha^ınes, > ## Ici la lettre 'A' dans le vecteur 'month.name'. > month.name[grep("a", month.name)] [1] "April" "August" > ## Insérer un motif à une place donnée consiste à remplacer un motif > ## par un autre en utilisant une référence arrière. > ## Rappel : le caractère '\' doit ^etre doublé '\\' en R > gsub('(i.*a)', 'xxx_\\1', "virginica") [1] "vxxx_irginica" Programmer en R Outils pratiques Slide 44/83

45 Interpréter une Chaîne de Caractères comme une Expression Quelques exemples utiles > ## Génère un vecteur des noms des objets de la session courante > mylist <- ls() > ## Afficher le nom de la première entrée > mylist[1] [1] "b" > ## Exécuter la première entrée comme une expression > get(mylist[1]) [1] FALSE FALSE FALSE > # Une autre approche > eval(parse(text=mylist[1])) [1] FALSE FALSE FALSE Programmer en R Outils pratiques Slide 45/83

46 Les fonctions Remplacer, Couper et Copier les Chaînes de Caractères Exemples choisis > ## Remplacer avec une référence arrière revient à insérer > ## Dans cet exemple, le caractère '_' > x <- gsub("(a)","\\1_", month.name[1]) > x [1] "Ja_nua_ry" > ## Couper la Cha^ınes suivant le caractère précédemment inséré > strsplit(x,"_") [[1]] [1] "Ja" "nua" "ry" > ## Renverser une Cha^ıne de caractères en rangeant chacun de ses caractères > ## dans un vecteur > paste(rev(unlist(strsplit(x, NULL))), collapse="") [1] "yr_aun_aj" Programmer en R Outils pratiques Slide 46/83

47 Time, Date and Sleep Exemples choisis > ## Renvoie le temps CPU (et autres) qu'une expression (ici ls) utilise > system.time(ls()) user system elapsed > ## Renvoie la date et l'heure courantes du système > date() [1] "Thu Aug 28 12:39: " > ## Fait une pause dans l'exécution des expressions R d'un temps donné > ## en secondes (par ex. dans une boucle ) > Sys.sleep(1) Programmer en R Outils pratiques Slide 47/83

48 Récupérer des lignes de fichier à l aide d expressions régulières L exemple suivant illustre la récupération de lignes spécifiques dans un fichier externe à l aide d une expression régulière. Tout d abord, un fichier externe est créé avec la fonction cat ; toutes les lignes de ce fichier sont rangées dans un vecteur avec ReadLines ; les éléments spécifiques (les lignes commençant par J ) sont ensuite recherchées avec la fonction grep ; et les lignes résultantes sont découpés et rangées dans un vecteur avec strsplit. > cat(month.name, file="zzz.txt", sep="\n") > x <- readlines("zzz.txt") > x[1:6] [1] "January" "February" "March" "April" "May" "June" > x <- x[c(grep("^j", x))] > t(as.data.frame(strsplit(x, "u"))) [,1] [,2] c..jan...ary.. "Jan" "ary" c..j...ne.. "J" "ne" c..j...ly.. "J" "ly" Programmer en R Outils pratiques Slide 48/83

49 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R Appeler des Commandes Externes Slide 49/83

50 Exécuter une Ligne Commande Système Exemple d exécution de la commande awk depuis R > system("awk -F \":\" \'{ $2 = \"\" ; print $0 }\' /etc/passwd") Programmer en R Appeler des Commandes Externes Slide 50/83

51 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R Exécuter des Scripts R Slide 51/83

52 Options to Execute R Scripts Exécuter des scripts R depuis la console > source("my_script.r") Exécuter un script R comme ligne de commande Rscript my_script.r # ou./myscript.r après l'avoir rendu exécutable R CMD BATCH my_script.r # Alternative #1 R --slave < my_script.r # Alternative #2 Programmer en R Exécuter des Scripts R Slide 52/83

53 Options to Execute R Scripts Passage d arguments de ligne de commande pour les programmes de R. Dans l exemple ci-dessous le nombre 3 de la ligne de commande est transmis comme argument au script R qui est utilisé pour afficher les 3 premières lignes de la BD iris. Si plusieurs arguments sont fournis, ils seront interprétés comme une seule chaîne et devront être scindés en R avec la fonction strsplit. Un exemple plus détaillé peut être trouvé ici : Link ## Créer le script R nommé 'test.r' ################################## myarg <- commandargs() print(iris[1:myarg, ]) ################################## ## Puis exécuter le script depuis la console Rscript test.r 3 Sepal.Length Sepal.Width Petal.Length Petal.Width Species setosa setosa setosa Programmer en R Exécuter des Scripts R Slide 53/83

54 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R Construire des Packages R Slide 54/83

55 Un Bref Apperçu du Processus de Construction de Package Construction automatique de packages avec la fonction de package.skeleton. L exemple donné créera un répertoire nommé mypackage contenant le squelette du package de toutes les fonctions, méthodes et classes définies dans le script(s) R transmis à l argument code_files. La structure de base du répertoire du package est décrit ici : Link. Le dossier du package possèdera également un fichier nommé Read-and-delete-me contenant les instructions poru compléter le package : > package.skeleton(name="mypackage", + code_files=c("script1.r", "script2.r"), + namespace=true) Une fois le squelette du paquet disponible, on peut construire le package à partir d un terminale de commandes (Linux / OS X). Ceci va créer une archive du package avec son numéro de version inscrit dans le nom du fichier. Ensuite, les erreurs de l archive doivent être vérifiées avec : R CMD build mypackage R CMD check mypackage_1.0.tar.gz Installer un package à partir de son archive > install.packages("mypackage_1.0.tar.gz", repos=null) Pour plus de détails voir : Link Programmer en R Construire des Packages R Slide 55/83

56 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R Exercices Slide 56/83

57 Exercice 1 : boucle for Tâche 1.1 : Calculer la moyenne de chaque ligne de myma avec la fonction mean dans une boucle for > myma <- matrix(rnorm(500), 100, 5, + dimnames=list(1:100, paste("c", 1:5, sep=""))) > myve_for <- NULL > for(i in seq(along=myma[,1])) { + myve_for <- c(myve_for, mean(as.numeric(myma[i, ]))) + } > myresult <- cbind(myma, mean_for=myve_for) > myresult[1:4, ] C1 C2 C3 C4 C5 mean_for Programmer en R Exercices Slide 57/83

58 Exercice 1 : boucle while Tâche 1.2 : Calculez la moyenne de chaque ligne de myma avec la fonction mean dans une boucle while > z <- 1 > myve_while <- NULL > while(z <= length(myma[,1])) { + myve_while <- c(myve_while, mean(as.numeric(myma[z, ]))) + z <- z } > myresult <- cbind(myma, mean_for=myve_for, mean_while=myve_while) > myresult[1:4, -c(1,2)] C3 C4 C5 mean_for mean_while Tâche 1.3 : Vérifiez que le résultat des méthodes de calcul de la moyenne sont identiques > all(myresult[,6] == myresult[,7]) [1] TRUE Programmer en R Exercices Slide 58/83

59 Exercice 1 : fonctionnelle apply au lieu de boucle dans R Tâche 1.4 : Calculez la moyenne de chaque ligne de myma à l aide de la fonction mean dans une fonctionnelle apply > myve_apply <- apply(myma, 1, mean) > myresult <- cbind(myma, mean_for=myve_for, mean_while=myve_while, + mean_apply=myve_apply) > myresult[1:4, -c(1,2)] C3 C4 C5 mean_for mean_while mean_apply Tâche 1.5 : Pour de grandes masses de données, préférez la fonction rowmeans > mymean <- rowmeans(myma) > myresult <- cbind(myma, mean_for=myve_for, mean_while=myve_while, + mean_apply=myve_apply, mean_int=mymean) > myresult[1:4, -c(1,2,3)] C4 C5 mean_for mean_while mean_apply mean_int Programmer en R Exercices Slide 59/83

60 Exercice 1bis : tableaux Exercice Créez une image à 3 composantes RGB de taille noire contenant 3 rectangles de taille (30 50) : Exercice le premier rectangle est rouge et en position 1 (70, 100) ; le deuxième est vert et en position (80, 80) ; le troisième est bleu et en position (80, 120). Reformatez l image précédente pour quelle soit sous la forme d une matrice de taille Chaque ligne est une composante rangée ligne après ligne. Exercice Construisez une liste contenant l image en 3 composantes, ses dimensions, le type (entier ou réel) des valeurs des pixels et pour chaque composante la valeur minimale et la valeur maximale. 1 coordonnées du coin haut gauche Programmer en R Exercices Slide 60/83

61 Exercice 2 : fonctions Tâche 2.1 : Utiliser le code suivant comme base pour définir une fonction qui permet à l utilisateur de calculer la moyenne pour toute combinaison de colonnes dans une matrice ou trame de données. Le premier argument de cette fonction doit spécifier le jeu de données en entrée, le second la fonction mathématique à transmettre (par exemple, moyenne, écart-type, max) et le troisième doit permettre la sélection des colonnes en fournissant un vecteur de regroupement. > myma <- matrix(rnorm(100000), 10000, 10, + dimnames=list(1:10000, paste("c", 1:10, sep=""))) > myma[1:2,] C1 C2 C3 C4 C5 C6 C C8 C9 C > mylist <- tapply(colnames(myma), c(1,1,1,2,2,2,3,3,4,4), list) > names(mylist) <- sapply(mylist, paste, collapse="_") > mymamean <- sapply(mylist, function(x) apply(myma[, x, drop=false], 1, mean)) > mymamean[1:4,] C1_C2_C3 C4_C5_C6 C7_C8 C9_C Programmer en R Exercices Slide 61/83

62 Exercice 3 : boucles imbriquées pour créer des matrices de similarité Tâche 3.1 : Créer une liste d échantillons constitués de vecteurs de caractères de différentes longueurs > setlist <- lapply(11:30, function(x) sample(letters, x, replace=true)) > names(setlist) <- paste("s", seq(along=setlist), sep="") > setlist[1:6] $S1 [1] "r" "e" "l" "x" "p" "a" "w" "e" "q" "t" "u" $S2 [1] "w" "u" "p" "i" "y" "u" "f" "r" "t" "w" "g" "r" $S3 [1] "k" "p" "x" "t" "z" "w" "s" "n" "r" "m" "r" "n" "z" $S4 [1] "e" "v" "z" "r" "f" "i" "h" "e" "o" "m" "t" "s" "f" "z" $S5 [1] "j" "q" "o" "i" "m" "f" "p" "j" "u" "t" "l" "h" "g" "g" "y" $S6 [1] "l" "q" "f" "o" "f" "a" "p" "k" "w" "l" "v" "o" "w" "f" "u" "c" Programmer en R Exercices Slide 62/83

63 Exercice 3 : boucles imbriquées pour créer des matrices de similarité Task 3.2: Calculez la longueur de tous les paires croisées de vecteurs stockés dans setlist. Les paires croisées peuvent être déterminées avec la fonction %in% comme ceci : sum(setlist[[1]] %in% setlist[[2]]) > setlist <- sapply(setlist, unique) > olma <- sapply(names(setlist), function(x) sapply(names(setlist), + function(y) sum(setlist[[x]] %in% setlist[[y]]))) > olma[1:12, 1:12] S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S S S S S S S S S S S S Programmer en R Exercices Slide 63/83

64 Exercice 3 : boucles imbriquées pour créer des matrices de similarité Tâche 3.3 : Tracer la matrice d intersection résultante sous la forme d une carte de chaleur. À cette fin, utilisez la fonction heatmap.2 de la bibliothèque de gplots. > library("gplots") > heatmap.2(olma, trace="none", Colv="none", Rowv="none", dendrogram="none", + col=colorpanel(40, "darkred", "orange", "yellow")) Count 0 Color Key and Histogram 5 10 Value S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 S15 S16 S17 S18 S19 S20 Programmer en R Exercices Slide 64/83

65 Exercice 4 : construisez votre propre package R Tâche 4.1 : Sauvegardez une ou plusieurs fonctions dans un fichier nommé script.r et construire le package avec la fonction package.skeleton > package.skeleton(name="mypackage", code_files=c("script1.r"), namespace=true) Tâche 4.2 : Construire une archive du package system("r CMD build mypackage") # ou depuis un terminal : R CMD build mypackage Tâche 4.3 : Installer et utiliser un package > install.packages("mypackage_1.0.tar.gz", repos=null, type="source") > library(mypackage) >?mymacomp # Ouvre l'aide sur les fonctions définies dans mypackage Programmer en R Exercices Slide 65/83

66 Exercices supplémentaires Voir ici : Link Programmer en R Exercices Slide 66/83

67 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R LATEX Slide 67/83

68 Qu est-ce que L A TEX? À l origine développé au début des années 1980 par Leslie Lamport. L A TEX est un langage à balises et un système de mise en forme de documents pour le programme de mise en page TeX. Développé pour les mathématiciens, statisticiens, ingénieurs et informaticiens. Une mise en pages de haute qualité poru les articles scientifiques. Un environnement programmable. Un référencement croisé extrèmement facile pour les équations, les tables, les figures, les bibliographies, etc. Programmer en R LATEX Slide 68/83

69 Comme ça fonctionne? Écrivez dans votr éditeur favori, par ex. : Vim or Emacs. Installez la distribution L A TEX de votre SE Windows: MiKTeX Linux: Latex Project Site Mac OS X: TexShop documentations L A TEX (sélection très incomplète) L association francophone Gutenberg La documentation L A TEX du Loria Une courte (?) introduction à L A TEX Une liste de documentations en anglais : Latex Project Site Getting to grips with L A TEX Packages Une liste quasi complète : Online TeX Catalogue Programmer en R LATEX Slide 69/83

70 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R LATEX Documentation and Bibliographie Slide 70/83

71 Bibtex: L outil final de gestion de référence bibliographique Le fichier Latex modèle : example.tex Convertir au PDF avec la commande : pdflatex example.tex Pour ajouter les références bibliographiques de la base MyBibTex.bib, la séquence d instructions suivantes doit être exécutées : pdflatex example.tex; bibtex example; pdflatex example.tex Programmer en R LATEX Documentation and Bibliographie Slide 71/83

72 Exemples de Citations BibTex Références entre parenthèses (Bellanger and Tomassone, 2014; Noel, 2013; Eddelbuettel, 2013; Dennis, 2012; Hilbe, 2013; Knell, 2013; Bloomfield, 2014) Références de Bellanger and Tomassone (2014); Noel (2013); Eddelbuettel (2013); Dennis (2012); Hilbe (2013); Knell (2013); Bloomfield (2014) Références étendues (Bellanger and Tomassone, 2014, Livre sur R en français) Références détaillées en bas-de-page (Bellanger and Tomassone, 2014) 2... La liste des bibliographies de ces références apparaît automatiquement à une position donnée, ici à la fin du document. 2 (Bellanger and Tomassone, 2014, Livre sur R en français) Programmer en R LATEX Documentation and Bibliographie Slide 72/83

73 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R Sweave : L Hybridation R/Latex pour la Recherche Reproductible Slide 73/83

74 La fonction Sweave de R intègre R à L A TEX Sweave fournit un canevas souple permettant de générer automatiquement des documents scientifiques en mixant les codes R et L A TEX. Les morceaux de code R sont localisés commençant par <<>>= et terminant et sont remplacés par les sorties R correspondantes au format L A TEX, par ex. les commandes, les objets les tracés. L utilisateur effectue l hybridation dans un fichier suffixé.rnw et la fonction Sweave() convertit ce fichier en un fichier latex typique. Un rapide exercice de prise en main : Téléchargez le fichier hybride Sweave-test-1.Rnw Exécuter dans la console R Sweave("Sweave-test-1.Rnw") Convertisez le fichier généré Sweave-test-1.tex en PDF à l aide de la commande pdflatex Sweave-test-1.tex Une Introduction à Sweave Programmer en R Sweave : L Hybridation R/Latex pour la Recherche Reproductible Slide 74/83

75 Sommaire Programmer en R Les objets Instructions de contrôle Instructions itératives boucles Fonctions Outils pratiques Appeler des Commandes Externes Exécuter des Scripts R Construire des Packages R Exercices LATEX Documentation and Bibliographie Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Programmer en R Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Slide 75/83

76 Structure d un fichier Rnw Latex \Sexpr{pi} Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex <<>>= R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex Latex <<>>= R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R Programmer en R Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Slide 76/83

77 Convertion d un fichier Rnw en fichier tex et eb fichier pdf 1 Créer un fichier tex > Sweave("mydoc.Rnw") 2 Créer un fichier source R avec des morceaux de codes (optionel) > Stangle("mydoc.Rnw") 3 Générer le PDF avec la bibliography > system("pdflatex mydoc.tex; bibtex mydoc; pdflatex mydoc.tex") Programmer en R Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Slide 77/83

78 Les Options des morceaux de code R Les principales options qui peuvent être ajouté à la marque de début d un morceau de code R : <<>>= label: optional name for code chunk. echo: shows command if set to TRUE. Default is TRUE. fig: shows plots automatically if set to TRUE. Alternatively, one can use standard R code to save graphics to files and point to them in Latex source code. eval: if FALSE, the variables and functions in code chunk are not evaluated. prefix: if TRUE, generated file names have a common prefix. Programmer en R Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Slide 78/83

79 Afficher des commandes R et leurs évaluations Entête d un transparent (slide) au format Beamer \ b e g i n { frame } [ c o n t a i n s v e r b a t i m ] Morceau de code (Code Chunk) > <<echo=true>>= > 1 : 1 0 Le résultat en PDF > 1:10 [1] Programmer en R Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Slide 79/83

80 Insérer des Tables avec la librairie xtable() Morceau de code (Code Chunk) Le résultat en PDF <<echo=false>>= l i b r a r y ( x t a b l e ) x t a b l e ( i r i s [ 1 : 4, ] Sepal.Length Sepal.Width Petal.Length Petal.Width Species setosa setosa setosa setosa Programmer en R Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Slide 80/83

81 Insérer des Graphiques Morceau de code (Code Chunk) << f i g=t r u e, width =4.5, h e i g h t =3.5, e v a l=true, echo=true>>= b a r p l o t ( 1 : 1 0, b e s i d e=true, c o l = g r e e n Le résultat en PDF > barplot(1:10, beside=true, col="green") Programmer en R Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Slide 81/83

82 Information sur la session > sessioninfo() R version ( ) Platform: i686-pc-linux-gnu (32-bit) locale: [1] LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=C [3] LC_TIME=fr_FR.UTF-8 LC_COLLATE=fr_FR.UTF-8 [5] LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8 [7] LC_PAPER=fr_FR.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grdevices utils datasets [6] methods base other attached packages: [1] xtable_1.7-3 gplots_ loaded via a namespace (and not attached): [1] bitops_1.0-6 catools_1.17 gdata_ [4] gtools_3.4.1 KernSmooth_ tools_3.0.2 Programmer en R Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Slide 82/83

83 Références bibliographiques : démonstration de l utilisation de BibTeX I Bellanger, L., Tomassone, R., Exploration de données et méthodes statistiques avec le logiciel R, 1st Edition. Références sciences. Ellipses. URL Bloomfield, V. A., Using R for Numerical Analysis in Science and Engineering. Chapman & Hall/CRC Press. URL Dennis, B., The R Student Companion. Chapman & Hall/CRC Press, Boca Raton, FL. URL Eddelbuettel, D., Seamless R and C++ Integration with Rcpp. Use R! Springer, New York. Hilbe, J., Methods of Statistical Model Estimation. Chapman & Hall/CRC Press, Boca Raton, FL. URL Knell, R. J., March Introductory R: A Beginner s Guide to Data Visualisation and Analysis using R. URL Noel, Y., Psychologie statistique avec R. Pratique R. Springer, Paris. URL Programmer en R Sweave : L Hybridation R/Latex pour la Recherche Reproductible Exemples Slide 83/83