Lire et écrire dans un fichier


Les données à faire manipuler à R proviennent régulièrement de sources extérieures au logiciel. Il est alors nécessaire d'importer ces données pour les traiter, puis éventuellement d'exporter certains résultats. R offre différentes possibilités pour lire et écrire dans un fichier, nous nous limiterons ici à la lectue et l'écriture d'un fichier texte.

I. Lire dans un fichier


Il a été mentionné plus haut que les données pouvaient être représentées sous la forme interne d'un data frame: une ligne par observation, et les différents champs correspondant aux différentes colonnes. Si les données externes sont dans ce format, comme ci-dessous, elles peuvent être lues directement en mémoire avec l'instruction 'read.table'


IndividuNomRaceAgeSexePoids
1BillTeckel10M9
2TexChihuahua8M3
3DaisyBichon6F5
4MaxCaniche7M6
5ReineTeckel8F7
6JoyCaniche6F6
7MedorChihuahua9M4
8ColossusBichon5M4
9FluteTeckel6F7
10StickCaniche9M6


Le format de l'instruction 'read.table' est comme ceci:

read.table(fichier, header=TRUE|FALSE, sep=char, quote=char, dec=char)

Signalons d'emblée qu'ils existent d'autres options que celle fournie dans cette définition (par exemple sur la manière de gérer les données manquantes), et qu'il existe d'autres fontions de lectures permettant un accès plus simple à certains formats (par exemple, read.csv pour lire des données dans le format csv). Dans la définition, 'fichier' est le nom du fichier (texte) à considérer, 'header=TRUE' ('header=FALSE') spécifie si la première ligne du fichier (ne) contient (pas) les titres des colonnes (qui deviennent alors les noms des variables du data frame), 'sep=char' permet de fournir le caractère séparant les champs successifs dans le fichier texte, 'quote=char' permet de fournir le caractère entourant les chaines de caractères, et 'dec=char' permet de définir le caractère faisant office de point décimal. Chacune de ces options possède une valeur par défaut: 'header=FALSE, sep=" ", quote="\" ' ", dec="." ' (comme le caractère double-guillemet est un caractère spécial en R, on peut l'utiliser comme caractère en le précédant de '\': le défaut pour 'quote' est donc soit le double-guillemet, soit le simple guillemet). Par conséquent, si on voulait lire le fichier ci-dessus, nommé 'donnees.txt', on pourrait écrire:

data<-read.table("donnees.txt", header=TRUE, sep="\t", quote="")

data
##    Individu    Nom      Race Age Sexe Poids
## 1         1   Bill    Teckel  10    M     9
## 2         2    Tex Chihuahua   8    M     3
## 3         3  Daisy    Bichon   6    F     5
## 4         4    Max   Caniche   7    M     6
## 5         5  Reine    Teckel   8    F     7
## 6         6    Joy   Caniche   6    F     6
## 7         7  Medor Chihuahua   9    M     4
## 8         8 Coloss    Bichon   5    M     4
## 9         9  Flute    Teckel   6    F     7
## 10       10  Stick   Caniche   9    M     6
data$Sexe
##  [1] M M F M F F M M F M
## Levels: F M

La dernière ligne, 'Levels: F M', indique que R considère cette variable comme un type particulier, appelé 'facteur'. Le facteur a ici 2 niveaux, représentés par 'F' et 'M'.

II. Ecrire dans un fichier


L'écriture dans un fichier est assez similaire: on peut écrire un data frame en employant l'instruction 'write.table' comme expliqué ci-dessous:

write.table(x,fichier, append=TRUE|FALSE, col.names=TRUE|FALSE, row.names=TRUE|FALSE, sep=char, quote=TRUE|FALSE, eol="\n", dec=char)

Dans cette définition, 'fichier' est un nom de fichier (ou la console si "" est spécifié), les défauts pour quote, row.names et col.names sont 'TRUE' (donc, les chaines de caractères seront entre guillemets, les numéros de lignes seront reportés et les noms des colonnes aussi) et le défaut pour 'append' est 'FALSE' (les données du data frame 'x' remplaceront les données éventuellement présentes dans le fichier de sortie. Si 'append=TRUE' est spécifiée, les donnée sont alors ajoutées à la fin du fichier. Nous allons illustrer le fonctionnement sur le petit exemple suivant:



sex<-c(rep("M",5), rep("F",5))
sex
##  [1] "M" "M" "M" "M" "M" "F" "F" "F" "F" "F"
weigth<-c(rnorm(5,20,4), rnorm(5,18,4))
data<-data.frame(sex,weigth)
write.table(data,"donnees2.txt", sep=";", dec=",", quote=FALSE)
Si votre commande est correcte, vous ne verrez rien apparaître dans R. Par contre, si vous ne mentionnez pas le nom du fichier où vos données doivent être enregistrées (dans ce cas-ci, "donnees2.txt"), votre tableau apparaîtra simplement dans R.
Voici ci-dessous le fichier donnees2.txt:

sex;weigth
1;M;27,3944538432556
2;M;19,4318224683182
3;M;19,4627196173456
4;M;18,3222374547862
5;M;19,8349964932723
6;F;15,572612375623
7;F;19,7207917887397
8;F;20,4649667131119
9;F;18,3819488983617
10;F;8,54889092200895

A signaler que les nombres réels sont stockés dans le fichier avec plus de décimales que celles affichées de manière interactive.