Valid XHTML     Valid CSS2    

Introduction à la programmation R (exercices)

Séance 6 : Eviter de programmer en R

                     gilles.hunault "at" univ-angers.fr

 

Table des matières cliquable

  1. Actions sur une liste de fichiers

  2. Transformations dans un data frame

  3. Positions dans une structure

  4. Barre de progression

  5. Documenter la fin de fonction

  6. Export de résultats pour publication ou démonstration

  7. Passer des boucles POUR aux fonctions *APPLY (ou autres)

 
Il est possible d'afficher toutes les solutions via ?solutions=1 et de toutes les masquer avec via ?solutions=0.

 

1. Actions sur une liste de fichiers

On veut exécuter une même action sur une série de fichiers. Comment implémenter cela en R ? Et avec un affichage comme :


     traitement du fichier  1/20 : serie1.txt
     traitement du fichier  2/20 : serieb.txt
     traitement du fichier  3/20 : suites.txt
     [...]
     

Solution :  

 

2. Transformations dans un data frame

Comment fait-on en R pour convertir des données dans un data frame ? Par exemple, comment convertir les unités américaines dans le système métrique pour les données height, weight et waist des données DIABETES ?

Solution :  

 

3. Positions dans une structure

Quelle est la façon la plus efficace en R pour trouver les positions d'éléments remarquables ? Par exemple pour trouver les positions du minimum, ou les valeurs plus grandes que la moyenne plus deux écart-types ?

Solution :  

 

4. Barre de progression

Comment implémenter une barre de progression en R ?

Solution :  

 

5. Documenter la fin de fonction

Vous avez déjà vu dans nos codes-source les fins de fonctions documentées comme ceci :


        } # fin de fonction convPouceCm
     
        } # fin de fonction carre
     
        } # fin de fonction TA
     

A quoi cela peut-il servir ?

Est-ce simple d'écrire une fonction qui utilise un paramètre qui correspond à un nom de fichier script au sens de R et en affiche la liste des fonctions avec le numéro de ligne du début de fonction comme dans


     > listeFonctions("conversion.r")
     
     Liste des fonctions du fichier conversion.r
     ===========================================
     
     1. saisieConversion()         8
     2. convPouceCm()             15
     

Comment utiliser cette fonction dans le terminal sans passer par Rstudio ?

Solution :  

 

6. Export de résultats pour publication ou démonstration

On voudrait produire des calculs en R et disposer rapidement et de façon reproductible des résultats numériques et graphiques sans avoir à passer par du copier/coller pour produire les documents associés. Comment faut-il s'y prendre ? Et si on a besoin de tirages aléatoires dans les calculs ?

Solution :  

 

7. Passer des boucles POUR aux fonctions *APPLY (ou autres)

Le passage en revue des colonnes d'un dataframe se fait facilement avec une boucle POUR, comme ci-dessous.


     # min, max et nombre de valeurs différentes pour les colonnes numériques
     # des données iris
     
     data(iris)
     
     for (idCol in (1:4)) {
         dataCol <- iris[,idCol]
         minCol  <- min(dataCol)
         maxCol  <- max(dataCol)
         nvdCol  <- length(unique(dataCol))
         cat(" colonne",idCol,"soit",names(iris)[idCol],"\n")
         cat("   min=",minCol)
         cat("   max=",maxCol)
         cat("   ndv=",nvdCol)
         cat("\n")
     } # fin pour idv
     

      colonne 1 soit Sepal.Length
        min= 4.3   max= 7.9   ndv= 35
      colonne 2 soit Sepal.Width
        min= 2   max= 4.4   ndv= 23
      colonne 3 soit Petal.Length
        min= 1   max= 6.9   ndv= 43
      colonne 4 soit Petal.Width
        min= 0.1   max= 2.5   ndv= 22
     

Remplacer cette boucle POUR par un appel de la fonction SAPPLY via les indices de colonnes. Trouver ensuite comment utiliser SAPPLY avec les noms de colonnes. Quel est, hormis la concision, l'intérêt de passer par des fonctions *APPLY ?

Comment produire la matrice triangulaire inférieure d'une matrice symétrique ? On pourra utiliser la fonction cor() ou la fonction dist() pour générer une telle matrice, comme par exemple :


     ## exemples de matrices symétriques en R
     
     data(iris)
     iris4 <- iris[,-5] # on on utilise deux fois ce data.frame
     
     cat("\n")
     cat("Matrice des coefficients de corrélation linéaire (Pearson)\n")
     print(cor(iris4)) # mieux sans doute : cor(iris4,method="pearson")
     
     cat("\n")
     cat("Matrice des distances euclidiennes entre colonnes\n")
     print(dist(t(iris4))) # mieux sans doute : dist(t(iris4,method"euclidean")
     
     rm(iris4) # une bonne pratique
     

     
     Matrice des coefficients de corrélation linéaire (Pearson)
                  Sepal.Length Sepal.Width Petal.Length Petal.Width
     Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
     Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
     Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
     Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000
     
     Matrice des distances euclidiennes entre colonnes
                  Sepal.Length Sepal.Width Petal.Length
     Sepal.Width      36.15785
     Petal.Length     28.96619    25.77809
     Petal.Width      57.18304    25.86407     33.86473
     

Solution :  

 

 

Code-source php de cette page. Retour à la page principale du cours.

 

 

retour gH    Retour à la page principale de   (gH)