Valid XHTML     Valid CSS2    

Introduction à la programmation R (exercices)

Séance 1 : Présentation des cours et principes généraux

                     gilles.hunault "at" univ-angers.fr

 

Table des matières cliquable

  1. Programmer en R avec Rstudio

  2. Bien programmer en R

  3. Occurences du minimum et du maximum

  4. Plus grande répétition

  5. Plus grande sous-chaine commune

  6. Programmation d'un aéroport

  7. Que faut-il conclure de ces exercices ?

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

 

1. Programmer en R avec Rstudio

Pourquoi vaut-il mieux utiliser Rstudio que l'interface standard si on veut programmer en R ?

Solution :  

Rstudio est un environnement très pratique pour programmer : on y trouve notamment un panneau qui affiche les variables avec leur valeur, il y a un "débuggeur" qui permet de tester les programmes ligne par ligne, on dispose d'un panneau pour voir et revoir ou exporter les graphiques, Rstudio sait installer les packages, afficher les "help", les données etc.

 

2. Bien programmer en R

Est-ce que tout le monde peut devenir une bonne programmeuse ou un bon programmeur ?

Solution :  

Malheureusement, non. Tout le monde peut apprendre à programmer, à condition d'y passer beaucoup de temps. Mais comme pour la conduite automobile, bien programmer demande un lourd investissement et des capacités personnelles innées...

 

3. Occurences du minimum et du maximum

Montrer comment on peut trouver «à la main» sur la liste de valeurs 1 8 2 5 8 7 8 le nombre d'occurences du maximum en un seul passage.

Solution :  

Il suffit de remarquer que si on change la valeur courante du maximum il faut remettre le "compteur" du nombre d'occurences à 1 et que, sinon, si on trouve à nouveau le maximum courant, il faut incrémenter (augmenter de un) ce compteur. Voici un exemple de traitement détaillé de ces idées :


     on utilise la liste 1 8 2 5 8 7 8
     et on la passe en revue de la gauche vers la droite
     (l'étoile indique où on est rendu)
     
     1 8 2 5 8 7 8
     *
     on utilise la valeur numéro 1, soit 1
     c'est la première valeur et donc le maximum pour l'instant,
     vu une fois
     
     1 8 2 5 8 7 8
       *
     on utilise la valeur numéro 2, soit 8
     comme 8 est plus grand que 1, c'est le nouveau maximum,
     vu une fois
     
     1 8 2 5 8 7 8
         *
     on utilise la valeur numéro 3, soit 2
     on ne fait rien, 2 est plus petit que 8
     
     1 8 2 5 8 7 8
           *
     on utilise la valeur numéro 4, soit 5
     on ne fait rien, 5 est plus petit que 8
     
     1 8 2 5 8 7 8
             *
     on utilise la valeur numéro 5, soit 8
     comme 8 est la valeur du maximum,
     on dit qu'on le voit une fois de plus, soit 2 fois en tout
     
     1 8 2 5 8 7 8
               *
     on utilise la valeur numéro 6, soit 7
     on ne fait rien, 7 est plus petit que 8
     
     
     1 8 2 5 8 7 8
                 *
     on utilise la valeur numéro 7, soit 8
     comme 8 est la valeur du maximum,
     on dit qu'on le voit une fois de plus, soit 3 fois en tout
     
     ==> au final, 8 est le maximum et on l'a vu 3 fois.
     

 

4. Plus grande répétition

Etant donnée une chaine de caractères, expliquer comment trouver la plus grande sous-chaine répétée d'au moins deux caractères, son nombre de répétitions et ses occurences.

Application 1. quelle est la plus grande sous-chaine répétée pour "MON BEAU BATEAU BLEU" ?

Application 2. quelle est la plus grande sous-chaine répétée pour de la séquence d'ADN de Pseudomonas putida GB-1 qui est un des cinq exemplaires séquencés de Pseudomonas putida ? Que risque-t-on d'obtenir ?

Solution :  

Mais ce n'est pas un problème facile !

Si on s'était contenté de demander la plus grande sous-chaine répétée, c'est-à-dire la lettre ou le caractère le plus fréquent, cela aurait été simple, puisqu'il aurait suffi de compter combien de fois chaque caractère est répété et de stocker ces valeurs dans une liste puis de trouver le maximum dans cette liste, ce qu'on sait déjà faire.

Malheureusement on ne sait pas quelle est la longueur de la chaine et si on devait construire toutes les sous-chaines de un, deux, trois... caractères, cela prendrait un très grand temps, surtout pour la séquence d'ADN qui compte environ 6 millions de caractères.

C'est là où l'informatique théorique peut nous aider. Il est possible de démontrer que la méthode la plus rapide consiste à utiliser un arbre des suffixes. On trouve alors (sans surprise) EAU pour la chaine MON BEAU BATEAU BLEU.

Que risque-t-on d'obtenir pour Pseudomonas putida GB-1 ? L'informatique est ici incapable de le prédire.

Qu'obtient-on pour Pseudomonas putida GB-1 ? La réponse "brute" est une séquence de 4015 caractères, répétée 2 fois, aux positions 183130 et 542146. Comment l'obtient-on et à quoi correspond-t-elle ? C'est une autre histoire... qui sera comptée dans un autre exercice.

 

5. Plus grande sous-chaine commune

On voudrait trouver la plus grande sous-chaine de caractères commune d'un ensemble de séquences d'ADN bactérien, par exemple pour les les 10 génomes séquencés de Helicobacter pylori pyloris.fasta.zip. Que devrait-t-on trouver ?

Solution :  

Mais ce n'est pas un problème facile, à nouveau !

La taille des chaines mises en jeu (plusieurs millions de caractères chaque) et la difficulté inhérente au problème (car on ne peut pas se contenter de chercher la plus grande sous-chaine de caractères commune pour chaque paire de séquences) font que pour résoudre ce problème il faut utiliser des méthodes très sophistiquées qui dépassent le cadre de ce cours.

 

6. Programmation d'un aéroport

On voudrait programmer la gestion des vols d'un aéroport. Donner les grandes lignes de la résolution de ce problème.

Solution :  

Là encore, c'est un problème dificile, ne serait-ce que par l'ampleur des contraintes à prendre en compte. Il est clair qu'on ne peut répondre à cette question en dix minutes, ni même en dix heures...

 

7. Que faut-il conclure de ces exercices ?

Que montrent, in fine ces exercices, et surtout les trois derniers ? Quel impact cela peut-il avoir sur les cours qui suivent et sur la réponse aux deux questions «combien de temps faut-il pour savoir bien programmer ?» et «peut-on tout programmer ?» ?

Solution :  

On peut en déduire que certains problèmes requièrent une grande technicité, ce qui demande de connaitre des structures de données complexes, de savoir calculer mathématiquement la complexité d'un algorithme -- ce qui n'est pas toujours facile -- et d'y consacrer beaucoup de temps.

En conséquence nos exercices ne pourront pas s'attaquer à des problèmes trop complexes et il ne pourra s'agir que d'une initiation à la programmation.

Pour bien programmer, en plus des techniques classiques qu'on apprend souvent en quatre ans progressifs (du baccalauréat au master d'informatique), il faut compter des années... de pratique. Heureusement, pour de la programmation classique d'ingénieur (comme lire des fichiers, automatiser des séries de calculs bien rodés, produire des statistiques et des graphiques...) quelques dizaines d'heures de pratique suffisent, une fois les concepts maitrisés. Ouf, cette formation sera quand même utile !

Il est clair qu'on ne sait pas aujourd'hui tout programmer. Malgré des décennies d'intelligence artificielle nous ne savons toujours pas programmer des machines qui parlent, qui comprennent les humains... Par contre tout ce qui est automatisable (parce que systématique, calculable) et traçable (parce que connu (statistiquement, mathématiquement...) est programmable, notamment en R.

 

 

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

 

 

retour gH    Retour à la page principale de   (gH)