Programmation

Types de fichiersR travaille à partir d'un répertoire de base, qui est donné par la commande getwd(). C'est là qu'il va chercher par défaut les fichiers à charger ou à exécuter. On peut le changer par la commande setwd. À défaut, il faut saisir le chemin d'accès complet du fichier que l'on souhaite charger ou sauvegarder. Le plus facile est d'utiliser le menu de l'interface \fbox{Misc} $ \longrightarrow$ \fbox{Changer le r\'epertoire courant}

Bien que l'encodage des données directement dans l'environnement R soit possible, dans la majorité des cas les données à analyser proviennent de sources externes sous forme de fichiers. De plus, les objets créés doivent pouvoir être sauvegardés entre les différentes sessions afin de pouvoir reprendre le travail là où on l'avait laissé. C'est pourquoi divers outils d'accès aux fichiers ont été développés sous R. On distingue ainsi les accès aux fichiers propriétaires de R, aux fichiers ASCII ainsi qu'aux fichiers provenant d'autres logiciels d'analyse statistique.

Il convient de distinguer plusieurs sortes de fichiers.

Définition de nouvelles fonctions L'utilisation de R consiste en général à étendre le langage par de nouvelles fonctions, définies par des séquences d'instructions. Il est possible de définir des fonctions personnalisées soit directement au départ de la console, soit via un éditeur de texte externe grâce à la commande fix(nom_fonction). La seconde possibilité (conseillée) permet la correction du code en cours d'édition, tandis que la première s'effectue ligne par ligne, sans retour en arrière possible. Vous pouvez aussi copier-coller le code complet, préparé dans un éditeur de texte, dans la console R.

D'une manière générale, la définition d'une fonction passe par l'expression suivante :

nom_fonction <- function(arg1[=expr1], arg2[=expr2], ...){ 
bloc d'instructions
}

Les accolades signalent à l'interpréteur de commande le début et la fin du code source de la fonction ainsi définie, tandis que les crochets ne font pas partie de l'expression mais indiquent le caractère facultatif des valeurs par défaut des arguments. Il est également possible de créer une fonction personnalisée au départ d'une fonction existante, tout en conservant l'original intact, grâce à

nom_fonction2 <- edit(nom_fonction1)

Lors de l'exécution, R renvoie par défaut le résultat de la dernière expression évaluée dans la fonction. Il est possible de préciser le résultat renvoyé grâce à la fonction return(objet1[, objet2, ...]), résultat qui prend la forme d'une liste nommée si plusieurs arguments sont spécifiés. Les arguments sont passés à la fonction par valeur et leur portée ainsi que celle de toute assignation classique à l'intérieur d'une fonction est locale. Lors de l'exécution, une copie des arguments est transmise à la fonction, laissant les originaux intacts. Les valeurs originelles des arguments ne sont donc pas modifiées par les expressions contenues dans la fonction.

x <- 2
carre <- function(z) {z<-z*z; return(z)}
carre(x) # retourne [1] 4
x  # retourne 2

Compte tenu de la puissance et de la concision du langage, il est fortement recommandé d'ajouter des commentaires au code des fonctions, en les faisant précéder du symbole dièse #. La suite de la ligne est alors ignorée lors de l'interprétation de la fonction et peut donc être complétée par un commentaire libre. Il est important de choisir des noms différents pour les nouvelles fonctions, sans quoi les définitions se superposeront, y compris à celles des fonctions prédéfinies. Quand on définit une nouvelle fonction numérique, on a toujours intérêt à faire en sorte qu'elle puisse s'appliquer correctement à une matrice, ce qui impose de veiller aux multiplications terme à terme.

Style de programmation La philosophie de R est celle d'un langage fonctionnel. Au lieu de créer un logiciel avec programme principal et procédures, on étend le langage par les fonctions dont on a besoin. Le rôle du programme principal est joué par un fichier de commandes appelé script contenant essentiellement des appels de fonctions.

Certaines erreurs difficiles à trouver proviennent de confusions entre noms de variables ou de fonctions. R garde en mémoire tous les noms introduits tant qu'ils n'ont pas été libérés par rm. Il est donc prudent de donner des noms assez explicites aux variables. Les variables introduites dans la session ou dans les fichiers de commandes sont globales. Par défaut, toutes les variables introduites à l'intérieur d'une fonction sont locales. C'est une des raisons pour lesquelles on a intérêt à définir de nouvelles fonctions plutôt que d'utiliser des fichiers de commande exécutables.

R propose les commandes des langages de programmation classiques.

Commandes principales
Pour for (i in vecteur}){ instruction; }
Tant que while (booleen){ instruction }
Si if booleen then{ instruction }
Sinon else   instruction }


         © UJF Grenoble, 2011                              Mentions légales