Partie 9 Exporter les résultats▲
Cette partie décrit comment, une fois les analyses réalisées, on peut exporter les résultats (tableaux et graphiques) dans un traitement de texte ou une application externe.
Export manuel de tableaux▲
Les tableaux générés par R (et plus largement, tous les types d'objets) peuvent être exportés pour inclusion dans un traitement de texte à l'aide de la fonction copie de l'extension rgrs(32).
Il suffit pour cela de lui passer en argument le tableau ou l'objet que l'on souhaite exporter. Dans ce qui suit on utilisera le tableau suivant, placé dans un objet nommé tab :
2.
3.
4.
5.
6.
R>
data
(hdv2003)
R>
tab <-
table
(hdv2003$
sexe, hdv2003$
bricol)
R>
tab
Non Oui
Homme 384
515
Femme 763
338
Copier/coller vers Excel et Word via le presse-papier▲
La première possibilité est d'utiliser les options par défaut de copie. Celle-ci va alors transformer le tableau (ou l'objet) en HTML et placer le résultat dans le presse-papier du système. Ceci ne fonctionne malheureusement que sous Windows(33).
R>
copie(tab)
On peut ensuite récupérer le résultat dans une feuille Excel en effectuant un simple Coller.
Et ensuite sélectionner le tableau sous Excel, le copier et le coller dans Word :
Export vers Word ou OpenOffice via un fichier▲
L'autre possibilité ne nécessite pas de passer par Excel, et fonctionne sous Word et OpenOffice sur toutes les plates-formes.
Elle nécessite de passer à la fonction copie l'option file
=
TRUE
qui enregistre le contenu de l'objet dans un fichier plutôt que de le placer dans le presse-papier :
R>
copie(tab, file
=
TRUE
)
Par défaut le résultat est placé dans un fichier nommé temp.html dans le répertoire courant, mais on peut modifier le nom et l'emplacement avec l'option filename :
R>
copie(tab, file
=
TRUE
, filename =
"exports/tab1.html"
)
On peut ensuite l'intégrer directement dans Word ou dans OpenOffice en utilisant le menu Insertion puis Fichier et en sélectionnant le fichier de sortie généré précédemment.
Export de graphiques▲
Export via l'interface graphique (Windows ou Mac OS X)▲
L'export de graphiques est très simple si on utilise l'interface graphique sous Windows. En effet, les fenêtres graphiques possèdent un menu Fichier qui comporte une entrée Sauver sous et une entrée Copier dans le presse-papier.
L'option Sauver sous donne le choix entre plusieurs formats de sortie, vectoriels (Metafile, Postscript) ou bitmaps (jpeg, png, tiff, etc.). Une fois l'image enregistrée on peut ensuite l'inclure dans n'importe quel document ou la retravailler avec un logiciel externe.
Une image bitmap est une image stockée sous forme de points, typiquement une photographie. Une image vectorielle est une image enregistrée dans un langage de description, typiquement un schéma ou une figure. Le second format présente l'avantage d'être en général beaucoup plus léger et d'être redimensionnable à l'infini sans perte de qualité. Pour plus d'informations, voir http://fr.wikipedia.org/wiki/Image_matricielle et http://fr.wikipedia.org/wiki/Image_vectorielle.
L'option Copier dans le presse-papier permet de placer le contenu de la fenêtre dans le presse-papier soit dans un format vectoriel soit dans un format bitmap. On peut ensuite récupérer le résultat dans un traitement de texte ou autre avec un simple Coller.
Des possibilités similaires sont offertes par l'interface sous Mac OS X, mais avec des formats proposés un peu différents.
Export avec les commandes de R▲
On peut également exporter les graphiques dans des fichiers de différents formats directement avec des commandes R. Ceci a l'avantage de fonctionner sur toutes les plates-formes, et de faciliter la mise à jour du graphique exporté (on n'a qu'à relancer les commandes concernées pour que le fichier externe soit mis à jour).
La première possibilité est d'exporter le contenu d'une fenêtre déjà existante à l'aide de la fonction dev.copy. On doit fournir à celle-ci le format de l'export (option device) et le nom du fichier (option file). Par exemple :
2.
3.
R>
boxplot
(rnorm
(100
))
R>
dev.copy
(device
=
png
, file
=
"export.png"
)
R>
dev.off
()
Les formats de sortie possibles varient selon les plates-formes, mais on retrouve partout les formats bitmap bmp, jpeg, png, tiff, et les formats vectoriels postscript ou pdf. La liste complète pour votre installation de R est disponible dans la page d'aide de Devices :
R>
?Devices
L'autre possibilité est de rediriger directement la sortie graphique dans un fichier, avant d'exécuter la commande générant la figure. On doit pour cela faire appel à l'une des commandes permettant cette redirection. Les plus courantes sont bmp, png, jpeg et tiff pour les formats bitmap, postscript, pdf, svg(34) et win.metafile(35) pour les formats vectoriels.
Ces fonctions prennent différentes options permettant de personnaliser la sortie graphique. Les plus courantes sont width et height qui donnent la largeur et la hauteur de l'image générée (en pixels pour les images bitmap, en pouces pour les images vectorielles), et pointsize qui donne la taille de base des polices de caractères utilisées.
2.
3.
4.
5.
6.
R>
png
(file
=
"out.png"
, width
=
800
, height
=
700
)
R>
plot
(rnorm
(100
))
R>
dev.off
()
R>
pdf
(file
=
"out.pdf"
, width
=
9
, height
=
9
, pointsize =
10
)
R>
plot
(rnorm
(150
))
R>
dev.off
()
Il est nécessaire de faire un appel à la fonction dev.off après génération du graphique pour que le résultat soit bien écrit dans le fichier de sortie (dans le cas contraire, on se retrouve avec un fichier vide).
Génération automatique de rapports avec OpenOffice▲
Les méthodes précédentes permettent d'exporter tableaux et graphiques, mais cette opération reste manuelle, un peu laborieuse et répétitive, et surtout elle ne permet pas de mise à jour facile des documents externes en cas de modification des données analysées ou du code.
R et son extension odfWeave permettent de résoudre en partie ce problème. Le principe de base est d'inclure du code R dans un document de type traitement de texte, et de procéder ensuite au remplacement automatique du code par le résultat sous forme de texte, de tableau ou de figure.
Prérequis▲
odfWeave ne fonctionne qu'avec des documents au format ODF, donc en particulier avec OpenOffice, mais pas avec Word. L'utilisation d'OpenOffice est cependant très proche de celle de Word, et les documents générés peuvent être ensuite ouverts sous Word pour édition.
L'installation de l'extension se fait de manière tout à fait classique :
R>
install.packages
("odfWeave"
, dep =
TRUE
)
Un autre prérequis est de disposer d'applications permettant de compresser et décompresser des fichiers au format zip. Or ceci n'est pas le cas par défaut sous Windows. Pour les récupérer, téléchargez l'archive à l'adresse suivante : http://alea.fr.eu.org/j/files/zip.zip.
Décompressez-la et placez les deux fichiers qu'elle contient (zip.exe et unzip.exe) dans votre répertoire système, c'est-à-dire en général soit c:\windows, soit c:\winnt.
Exemple▲
Prenons tout de suite un petit exemple. Soit le fichier OpenOffice représenté figure 9.1.
On voit qu'il contient à la fois du texte mis en forme (sous forme de titre notamment), mais aussi des passages plus ésotériques qui ressemblent plutôt à du code R.
Ce code est séparé du reste du texte par les caractères «»=
, en haut, et @
, en bas.
Créons maintenant un nouveau fichier R dans le même répertoire que notre fichier OpenOffice, et mettons-y le contenu suivant :
2.
R>
library
(odfWeave)
R>
odfWeave("odfWeave_exemple1.odt"
, "odfWeave_exemple1_out.odt"
)
Puis exécutons le tout... Nous devrions alors avoir un nouveau fichier nommé odfWeave_exemple1_out.odt dans notre répertoire de travail. Si on l'ouvre avec OpenOffice, on obtient le résultat indiqué figure 9.2.
Que constate-t-on ? Le passage contenant du code R a été remplacé par le code R en question, de couleur bleue, et par son résultat, en rouge.
Tout ceci est bien sympathique, mais un peu limité. La figure 9.3 montre un exemple plus complexe, dont le résultat est indiqué figure 9.4.
Le premier bloc de code R contient des options entre les séparateurs « et »=
. L'option echo=
FALSE
supprime l'affichage du code R (en bleu) dans le document résultat. L'option results=
hide supprime l'affichage du résultat du code (en rouge). Finalement, le code library
(rgrs) est exécuté, mais caché dans le document final.
Dans le deuxième bloc, l'option results=
xml indique que le résultat du code ne sera pas du simple texte, mais un objet déjà au format OpenOffice (en l'occurrence un tableau). Le code lui-même est ensuite assez classique, sauf la dernière instruction genere.tableau, qui, appliquée à un objet de type table, produit le tableau mis en forme dans le document résultat.
Plus loin, on a dans le cours du texte une chaîne \Sexprsum(tab) qui a été remplacée par le résultat du code qu'elle contient.
Enfin, dans le dernier bloc, l'option fig
=
TRUE
indique que le résultat sera cette fois une image. Et le bloc est bien remplacé par la figure correspondante dans le document final.
Utilisation▲
Le principe est donc le suivant : un document OpenOffice classique, avec du texte mis en forme, stylé et structuré de manière tout à fait libre, à l'intérieur duquel se trouve du code R. Ce code est délimité par les caractères «»=
(avant le code) et @
(après le code). On peut indiquer des options concernant le bloc de code R entre les caractères « et » de la chaîne ouvrante. Parmi les options possibles, les plus importantes sont :
- eval si
TRUE
(par défaut), le bloc de code est exécuté. Sinon il est seulement affiché et ne produit pas de résultat ; - echo si
TRUE
(par défaut), le code R du bloc est affiché dans le document résultat (par défaut en bleu). SiFALSE
, le code est masqué ; - results indique le type de résultat renvoyé par le bloc. Si l'option vaut verbatim (par défaut), le résultat de la commande est affiché tel quel (par défaut en rouge). Si elle vaut xml, le résultat attendu est un objet OpenOffice : c'est l'option que l'on utilisera lorsque l'on fait appel à la fonction genere.tableau. Si l'option vaut hide, le résultat est masqué ;
- fig si
TRUE
, indique que le résultat du code est une image.
En résumé, si on souhaite utiliser un bloc pour charger des extensions sans que des traces apparaissent dans le document final, on utilise «echo=
FALSE
,results=
hide»=
. Si on veut afficher un tableau généré par genere.tableau, on utilise «echo=
FALSE
,results=
xml»=
. Si on souhaite insérer un graphique, on utilise «echo=
FALSE
,fig
=
TRUE
»=
. Si on souhaite afficher du code R et son résultat « tel quel », on utilise simplement «»=
.
La fonction genere.tableau fait partie de l'extension rgrs . Elle transforme l'objet qu'on lui passe en paramètres dans un format mis en forme lisible par OpenOffice(36).
Elle permet de transformer les objets de types suivants :
- table à une ou deux dimensions (tri à plat ou tableau croisé obtenu avec les fonctions table, lprop, cprop… ;
- data.frame, y compris les tableaux de données ou le résultat de la commande freq ;
- v ;
- matrix.
Pour générer le document résultat, on doit lancer une session R utilisant comme répertoire de travail celui où se trouve le document OpenOffice source, et exécuter les deux commandes suivantes :
R>
library
(odfWeave)
R>
odfWeave("fichier_source.odt"
, "fichier_resultat.odt"
)
En pratique, on répartit en général son travail entre différents fichiers R que l'on appelle ensuite dans le document OpenOffice à l'aide de la fonction source, histoire de limiter le code R dans le document au strict minimum. Par exemple, si on a regroupé le chargement des données et les recodages dans un fichier nommé recodages.R, on pourra utiliser le code suivant en début de document :
2.
3.
<<
echo=
FALSE
,results=
hide>>=
source
("recodages.R"
)
@
et se contenter dans la suite de générer les tableaux et graphiques souhaités.
Il existe un conflit entre les extensions R2HTML et odfWeave qui peut empêcher la seconde de fonctionner correctement si la première est chargée en mémoire. En cas de problème on pourra enlever l'extension R2HTML avec la commande detach
(package:
R2HTML).
Enfin, différentes options sont disponibles pour personnaliser le résultat obtenu, et des commandes permettent de modifier le style d'affichage des tableaux et autres éléments générés. Pour plus d'informations, on se référera à la documentation de l'extension :
et notamment au document d'introduction en anglais :
Génération automatique de rapports avec LATEX▲
Des fonctionnalités similaires à celles offertes par l'extension odfWeave sont fournies pour LATEX par l'extension Sweave, permettant de générer dynamiquement des documents contenant du code R avec un rendu typographiquement de haute qualité.
Comme cette extension nécessite l'apprentissage de LATEX, elle dépasse le cadre de ce document(37).