Valid XHTML     Valid CSS2    

Introduction à la programmation R (exercices)

Séance 9 : Différences entre programmation et développement

                     gilles.hunault "at" univ-angers.fr

 

Table des matières cliquable

  1. Profilage et débogagge sous R

  2. Packages pour tests en R

  3. Comment définit-on des classes d'objets en R ?

  4. Comment écrit-on un package R ?

  5. Est-il facile de reformater du code R ?

  6. Comment implémenter des "reproducible researches" en R ?

  7. Bibliographie sur la programmation R et tidyverse

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

 

1. Profilage et débogagge sous R

Peut-on facilement débugger du code R ? Et le «profiler, le benchmarker» ?

Par exemple, est-il plus rapide d'écrire c(min(v),max(v)) ou range(v) ?

Solution :  

 

2. Packages pour tests en R

Comment fait-on des tests unitaires en R ? Quels packages sont prévus pour cela ? Application : écrire des tests pour la fonction ci-dessous avec les packages testthat et assertive.


     ################################################################################
     #
     # fonctions pour conversion pouce/cm
     #
     ################################################################################
     
     convPouceCm <- function(valeur,unite) {
     
          if (missing(valeur) | missing(unite)) {
            cat("\n")
            cat(" syntaxe  :  convPouceCm(valeur,unite) avec unite = pouces ou cm\n")
            cat(" exemples :  convPouceCm(10,\"pouces\")\n")
            cat("             convPouceCm(20,\"cm\")\n\n")
            stop()
          } ; # finsi
     
          # pouce on multiplie, sinon on divise
     
          facteurConv <- 2.54
          uniteOk     <- 0
     
          if (unite=="pouces") {
              autreu  <- "cm" ;
              uniteOk <- 1
          } ;
     
          if (unite=="cm") {
              facteurConv <- 1/facteurConv ;
              autreu      <- "pouces" ;
              uniteOk     <- 1
          } ; # fin si
     
          if (uniteOk==0) {
            cat(" unité incorrecte. il faut écrire exactement ",
                " \"pouces\" ou \"cm\" comme unité.\n")
          } else {
            resultatConv <- valeur*facteurConv
            cat(valeur," ",unite," = ", resultatConv," ",autreu,".\n",sep="") ;
          } # finsi
     
          return( c(resultatConv,autreu) )
     
     } # fin de fonction convPouceCm
     

Expliquer pourquoi les fonctions de R ne fournissent pas d'aide si on les appelle sans paramètre, contrairement à nos fonctions :


     > source("convpouces.r",encoding="latin1")
     
     > convPouceCm()
     
      syntaxe  :  convPouceCm(valeur,unite) avec unite = pouces ou cm
      exemples :  convPouceCm(10,"pouces")
                  convPouceCm(20,"cm")
     
     Error in convPouceCm().
     

Solution :  

 

3. Comment définit-on des classes d'objets en R ?

Dans les langages de programmation classiques, on définit des classes d'objets. Peut-on le faire en R ?

Solution :  

 

4. Comment écrit-on un package R ?

Que contient exactement un package R ? Est-ce facile d'en écrire un, d'en déposer un au CRAN ?

Solution :  

 

5. Est-il facile de reformater du code R ?

Certains écrivent du code R «n'importe comment». Y a-t-il des règles d'écriture de code R, des outils pour reformater le code R ?

Solution :  

 

6. Comment implémenter des "reproducible researches" en R ?

R et Rstudio ont un gros problème avec la notion d'environnement : certaines variables ont été crées "à la main", en interactif, et R les voit dans les fonctions... Comment produire et documenter du code "propre" et pouvoir reproduire des comportements fonctionnels en R ? Quels outils faut-il utiliser pour faire du DRY (qu'est-ce ?) en R ?

Solution :  

 

7. Bibliographie sur la programmation R et tidyverse

Il existe beaucoup de livres sur R vu sous l'angle des statistiques comme on peut le voir ici ici . Mais pour la programmation, quels ouvrages trouve-t-on ?

Quels livres de H. Wickham (qui est-ce ?) sont en ligne ?

Expliquer ce que font les instructions suivantes écrites en R pour tidyverse.


     x %>%  f     # curieux, n'est-ce pas ?
     x %>%  f(y)  #
     x %<>% f     # il y a un symbole de plus qu'à la ligne 1
     

Réécrire en R/tidyverse le code suivant, solution d'un de nos exercices.


     ## comparaisons entre valeurs observées et théoriques, syntaxe classique
     
     Vobs <- c(18,55,21,12,4)
     Vthe <- c(6.875,27.5,41.25,27.5,6.875)
     
     Ind   <- 1:length(Vthe)
     Dif   <- Vthe - Vobs
     Cntr  <- Dif*Dif/Vthe
     
     df <- data.frame(Ind,Vthe,Vobs,Dif,Cntr)
     print(df)
     
     # tri par contribution décroisssante
     
     idx <- order(Cntr,decreasing=TRUE)
     df  <- df[idx,]
     
     # ajout des pourcentages et du cumul
     
     df[,"Pct"] <- 100*df$Cntr/sum(Cntr)
     df$Cumul   <- cumsum(df$Pct)
     
     print(df)
     
     

Comment écrire sa thèse avec Rstudio ?

Solution :  

 

 

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

 

 

retour gH    Retour à la page principale de   (gH)