Valid XHTML     Valid CSS2    

Introduction à la programmation avec R

                gilles.hunault "at" univ-angers.fr

Cours 1 - Présentation des cours et principes généraux

 

Table des matières cliquable

  1. Qu'est-ce que la programmation en R ?

  2. Comment apprendre à programmer ?

  3. Présentation des cours

  4. Principes de programmation

  5. Spécificités du langage R

 
Exercices :           énoncés            solutions           [Retour à la page principale du cours]

1. Qu'est-ce que la programmation en R ?

Programmer, c'est, historiquement «écrire» des programmes, c'est-à-dire des textes dans un langage spécial compris par un ordinateur. Ecrire est mis ici pour réaliser, ce qui signifie à la fois concevoir, écrire, tester, documenter. Lorsqu'un programme est d'importance (penser à un programme qui gère le décollage des avions dans un aéroport), plusieurs personnes voire plusieurs centaines de personnes peuvent y participer.

L'expression langage spécial indique qu'il va falloir en quelque sorte apprendre une nouvelle langue, simplifiée (basée plus ou moins sur l'anglais) et surtout, qu'il va falloir tout dire en utilisant cette langue. On utilise parfois un autre langage moins spécifique nommé algorithmique en français pour juste réfléchir aux idées, aux concepts et aux actions à exécuter.

Dans un langage de programmation, on trouve en général cinq actions principales 

  • effectuer un calcul (plus ou moins complexe)

  • lire une ou plusieurs valeurs (au clavier, dans un fichier, en mémoire...)

  • écrire une ou plusieurs valeurs (à l'écran, dans un fichier, en mémoire...)

  • appeler un sous-programme (avec éventuellement des paramètres)

  • gérer le flux des instructions (faire des tests ou des boucles)

La programmation en R est un peu spéciale dans la mesure où on n'écrit pas vraiment des programmes mais plutôt des scripts dans un environnement. Nous reviendrons régulièrement sur cette différence au travers d'exemples afin que vous puissiez aussi programmer dans d'autres langages.

2. Comment apprendre à programmer ?

Pour apprendre à programmer, il faut donc utiliser les mêmes techniques que pour apprendre une nouvelle langue. Cela inclut donc beaucoup de pratique, de répétition, d'entrainement. Après avoir maitrisé le vocabulaire de base, on passe à la syntaxe élémentaire puis au bout d'un certain temps on passe à des phrases plus longues, on apprend la grammaire et surtout, on continue encore et encore...

L'avantage avec l'ordinateur, c'est qu'il est infiniment patient et qu'on ne risque pas de l'énerver en commettant toujours la même erreur, qu'on peut essayer et essayer encore et encore, jusqu'à temps qu'on arrive à se faire comprendre. Par contre, le gros défaut, c'est qu'il est bête ou plus exactement mécanique et qu'il est incapable d'accepter l'à peu près.

Par exemple si un étranger vous dit «je voudrais un papier blanche» ou «je voudrais une blanche papier» vous corrigerez de vous-mêmes en papier blanc et vous comprendrez ce que veut la personne. Si par contre vous demandez à l'ordinateur d'appeler le sous-programme CALCUL(x,)y au lieu du sous-programme CALCUL(x,y), il ne saura que vous répondre "erreur de syntaxe, " et peut-être, dans le meilleur des cas, "variable manquante après la virgule".

3. Présentation des cours

Nous allons donc progressivement apprendre des mots et les utiliser dans des phrases courtes, puis réfléchir pour savoir comment construire des phrases longues, produire automatiquement des séries de phrases, automatiser des comportements...

Une des difficultés sera de comprendre comment l'ordinateur comprend nos phrases, de mettre en place des automatismes, des habitudes de programmation.

Le cours 1 (ce cours) insiste sur les principes généraux et doit convaincre des qualités qu'il faut développer pour savoir programmer. Le cours 2 sera focalisé sur la notion de variable et d'affectation (calcul ou remplacement de variable). Le cours 3 sert à apprendre comment indiquer à l'ordinateur quelles instructions réaliser en fonction de conditions sur les valeurs des variables (ce qu'on nomme tests logiques). Les boucles et itérations seront présentées au cours 4 alors que les sous-programmes seront traités dans le cours 5. Les autres cours serviront à indiquer tout le travail qu'il reste à faire pour savoir "bien" programmer en R.

4. Principes de programmation

Avant de rentrer dans le détail des instructions de programmation, voici quelques exemples de situation pour expliciter les grands principes de la programmation. Vous en déduirez facilement les qualités et compétences requises pour savoir programmer...

4.1 Programmer, c'est réfléchir et organiser

Imaginons que nous cherchions ce qu'on nomme maximum d'une série de valeurs, c'est-à-dire la plus grande valeur.

Prenons par exemple les valeurs 1 8 2 5 8 7 8. Je suis sûr que vous avez trouvé le maximum qui est 8. Mais de quel 8 s'agit-il ? Est-ce le premier ? Le second ? Le dernier ?

Et comment avez-vous fait ? Avez-vous passé en revue toutes les valeurs à partir du début ? Ou à partir de la fin ?

Et s'il s'agissait de pourcentages, vu que le maximum est 100 %, est-ce que cela changerait quelque chose à votre façon de chercher le maximum ?

Imaginons maintenant que nous voulions le maximum, le nombre de fois où il apparait et la (ou les) positions où il apparait. Sachant que la liste des valeurs est longue pour un humain (disons une centaine de valeurs), sauriez-vous résoudre ce problème en ne passant en revue la liste qu'une seule fois ?

Programmer, c'est aussi se poser ce genre de questions. En cas de très grandes listes pour l'ordinateur (par exemple si chaque valeur est obtenue au bout d'un long calcul), il faut réfléchir pour trouver une méthode rapide. Passer en revue la liste une première fois pour trouver le maximum et la passer en revue une seconde fois pour calculer le nombre d'occurences et les positions du maximum est une méthode simple mais non rapide.

L'usage veut donc qu'avant de commencer à programmer on réfléchisse au problème, aux entrées et aux sorties, aux fonctionnalités de ce qu'on veut faire, aux durées possibles et prévoir en retour ce qu'on va programmer...

4.2 Programmer, c'est choisir et expliciter ses choix

Voici un exemple classique qui fait partie de la programmation traditionnelle : construire le nom d'un fichier de sortie à partir d'un fichier d'entrée. Par exemple on veut, à partir du fichier serie35.xls construire le fichier serie35.txt ou encore, à partir de serie_1.manip2.rep036.xls construire serie_1.manip2.rep036.txt.

Vous voyez certainement ce qu'il faut faire : repérer le "bon" point qui indique la fin du nom de fichier (ce n'est donc pas le premier point qu'on rencontre dans le nom de fichier, mais plutôt le dernier), puis extraire la partie avant ce point et rajouter txt ou .txt suivant qu'on a déjà extrait le point ou non.

Si les méthodes extraire la première partie avec le point et sans le point sont sans doute équivalentes en terme de simplicité et de vitesse, quelle est la meilleure méthode ? Et selon quels critères ? Une fois que vous aurez trouvé ce qui est la meilleure méthode pour vous (et vos fichiers) -- ce qui n'est peut-être pas la même meilleure méthode que pour vos collègues -- il faut le noter, documenter ce choix pour éviter de se poser la question à nouveau et toujours s'y tenir, ce qui peut se faire en écrivant un sous-programme qui réalise ce traitement.

4.3 Programmer, c'est tester, prévoir et valider

Reprenons l'exemple précédent de construction d'un nom de fichier en sortie. Nous avions basé notre analyse sur le fait qu'il y avait un point en fin de nom de fichier d'entrée. Et si ce n'était pas le cas ? C'est ce qui risque d'arriver non pas en ligne, si on tape le nom du fichier, mais si le nom du fichier d'entrée a par exemple été mal construit par un autre programme. Que fait la méthode précédente ?

La réponse dépend de la façon dont vous avez détecté le point. Certaines fonctions renvoient, lorsque le point n'est pas trouvé, la valeur -1, d'autres une valeur égale à "1 de plus que la longueur du nom de fichier". Ces deux choix se valent, le plus important est d'y avoir pensé car ce qu'il faut faire dans ce cas dépend de la valeur renvoyée.

Nous essaierons, dans le cadre des exercices présentés, de prévoir les cas usuels classiques d'erreur (fichier non présent ou faute de frappe, liste vide de valeurs...) afin d'avoir des programmes dits robustes et fiables.

Cela signifie qu'en conséquence il faudra tester différents cas classiques afin de valider le "bon" comportement de nos programmes dans les conditions normales d'application et de gérer les cas exceptionnels.

En particulier, il faudra réfléchir, organiser et prévoir ce qu'on fait par exemple si un fichier n'est pas vu alors qu'on traite une liste de fichiers. Interrompre le programme pour demander un nouveau nom est peut-être inadapté, tout arrêter est sans doute trop brutal, se contenter d'afficher un message d'erreur est certainement maladroit parce qu'il risque de disparaitre si la liste des fichiers à traiter est longue...

4.4 Programmer demande de l'endurance, de la précision et de la rigueur

Au vu des situations présentées ci-dessus, il est clair que la programmation n'est pas au départ une partie de plaisir puisqu'il faut réfléchir, trouver une "bonne" solution -- souvent un compromis entre simplicité et vitesse d'exécution, penser aux erreurs possibles...

Par contre, c'est au final une réelle joie que d'avoir un programme qui "tourne" sans "bugger" ou "boucler", que d'obtenir presque automatiquement toute une série de résultats et de fichiers sans avoir de nombreux copier/coller ou de fastidieuses manipulations à faire et à refaire, de fournir à la communauté un programme qui peut aider d'autres collègues et faire gagner ainsi beaucoup de temps, cette denrée rare...

5. Spécificités du langage R

La programmation en R ressemble au départ à la programmation traditionnelle. Ce qui change beaucoup, c'est principalement le fait que R est vectoriel, qu'on utilise un environnement qui sauvegarde les variables et qu'il y a des milliers de fonctions de base et des milliers de fonctions complémentaires disponibles dans des packages. Du coup, de nombreuses actions (trier, calculer, tracer...) sont soit élémentaires soit déjà programmées.

 
Exercices :           énoncés            solutions           [Retour à la page principale du cours]

 

 

retour gH    Retour à la page principale de   (gH)