Valid XHTML     Valid CSS2    

Introduction à la programmation R (exercices)

Séance 4 : Boucles et itérations

                     gilles.hunault "at" univ-angers.fr

 

Table des matières cliquable

  1. Equivalent TANT QUE d'une boucle POUR

  2. Nombre d'occurrences du maximum avec puis sans boucle

  3. Sommes par colonne

  4. Des boucles TANT QUE surprenantes

  5. Calculs complexes sur séries de fichiers

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

 

1. Equivalent TANT QUE d'une boucle POUR

Ecrire en R une boucle TANT QUE équivalente à la boucle POUR suivante


     # une boucle POUR simple
     
     nbEtap <- 10 # nombre d'étapes en tout
     for (indEtap in (1:nbEtap)) {
       cat("étape ",sprintf("%2d",indEtap),"sur",nbEtap,"\n")
       # [...] suite des calculs de l'étape
     } # fin pour indEtap
     
     cat("après la boucle, l'indice indEtap vaut ",indEtap,"\n")
     

Solution :  

 

2. Nombre d'occurrences du maximum avec puis sans boucle

On veut trouver le maximum du vecteur V et son nombre d'occurrences. Ecrire une première boucle POUR qui détermine le maximum et une seconde boucle POUR qui calcule le nombre d'occurrences.

Réécrire ensuite tout cela avec une seule boucle POUR puis enfin donner la "bonne" solution R sans boucle explicite.

Serait-ce beaucoup plus compliqué de renvoyer la ou les positions du maximum dans le vecteur ?

Solution :  

 

3. Sommes par colonne

On dispose d'une matrice de valeurs numériques, comme par exemple celle définie par


     m <- matrix(1:12,nrow=2,byrow=TRUE)
     

Calculer la somme de chaque colonne avec une boucle POUR puis sans boucle POUR à l'aide de la fonction apply(). Quelle est enfin la "bonne" solution R ?

Solution :  

 

4. Des boucles TANT QUE surprenantes

Que font les boucles TANT QUE suivantes ?


     # Des boucles TANT QUE surprenantes
     #
     ####################################
     
     # une boucle TANT que non infinie
     # -------------------------------
     
     n1 <- 1
     n2 <-  n1/10
     while (abs(n1-n2)>0) {
       n1  <-  n2
       n2  <-  n2/10
     cat(n1,n2,"\n")
     } # # fin de tant que
     
     
     # une boucle TANT qui va à l'infini
     # -------------------------------
     
     n <- 1
     while (!is.infinite(n)) {
       n <- 10*n
       cat(n,"\n")
     } ; # fin tant que
     

Solution :  

 

5. Calculs complexes sur séries de fichiers

On veut traiter n fichiers, disons ficSerie01.txt, ficSerie02.txt, ficSerie03.txt... mais ce pourrait être bien sûr des fichiers Excel. Une fois le traitement de chaque fichier effectué, on veut obtenir un tableau et un fichier .CSV résumé des traitements. Le traitement consiste à renvoyer le nombre de lignes et le plus petit age et le plus grand age. Peut-on aussi calculer la moyenne des ages et la moyenne générale des ages ainsi ?

Solution :  

 

 

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

 

 

retour gH    Retour à la page principale de   (gH)