tdr78
Cette che donne quelques indications pour rdiger un rapport inte e grant des analyses statistiques et des graphiques produits par .
4 Conclusion 17 4.1 Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . 17 ` 4.2 A propos dodfWeave . . . . . . . . . . . . . . . . . . . . . . . . . 18 5 Traduction de la FAQ de Sweave() 5.1 O` trouver le manuel et des informations ` propos de Sweave ? . u a 5.2 Comment faire pour que Emacs reconnaisse automatiquement des chiers au format Sweave ? . . . . . . . . . . . . . . . . . . . . . 5.3 Comment excuter Sweave ` partir dun interprteur de lignes de e a e commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A 5.4 Pourquoi est ce que L TEXne trouve pas mes gures EPS et PDF quand il y a un point dans le nom des chiers ? . . . . . . . . . . 5.5 Pourquoi Sweave cr par dfaut ` la fois des chiers EPS et PDF ? ee e a 5.6 Pourquoi les fragments de code sans gure donnent une erreur A L TEX ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 19 19 19 19 19 20 20
J.R. Lobry 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 Pourquoi les graphiques lattice ne marchent pas ? . . . . . . . . Comment faire pour avoir des graphiques lattice en noir et blanc ? Comment insrer plusieurs gures ` partir dun seul fragment de e a code ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comment ranger tous les chiers graphiques produits par Sweave dans un sous-dossier plutt quau mme niveau que le chier o e Sweave ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comment changer les param`tres graphiques par() pour plue sieurs fragments de code ? . . . . . . . . . . . . . . . . . . . . . . A La compilation L TEX ne marche pas sous Windows . . . . . . . . Comment changer le style des entre et sorties de fragment de e code ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comment changer la longueur des lignes des entres et sorties de e fragments de code . . . . . . . . . . . . . . . . . . . . . . . . . . Peut on utiliser Sweave pour des chiers HTML ? . . . . . . . . . Apr`s avoir charg le paquet R2HTML, Sweave ne marche plus ! . . e e Pourquoi Sweave enl`ve tous mes commentaires du code ? Poure quoi est ce quil ne respecte pas mes sauts ` la ligne ? . . . . . . a 20 21 22 23 23 25 25 25 26 26 26 26
Rfrences ee
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 2/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
Introduction
Il existe deux grandes approches pour rdiger un rapport faisant appel ` des e a analyses et ` des graphiques produits sous . a 1. Une premi`re approche, que nous qualierons dartisanale, sans aucun e sens pjoratif, est destine ` la production dun nombre tr`s restreint de e e a e rapports tous tr`s courts. Cette approche est adapte si vous nenvisagez e e de produire que des rapports de faon sporadique et que vous ntes pas c e intress par une carri`re scientique au sens tr`s large du terme1 . e e e e 2. Une deuxi`me approche, que nous qualierons de professionnelle, est plus e adapte ` la production de nombreux rapports, ou dun rapport de taille e a dans le rapport consquente. Elle consiste ` intgrer directement le code e a e et ` utiliser a pour produire les graphiques et les analyses ` intgrer a e directement dans le document nal (oui cest possible !). Ceci garanti la parfaite reproductibilit de vos rsultats. e e
Cette approche consiste simplement ` ouvrir simultanment a e et votre traitement de texte favori pour copier/coller les rsultats qui vous intressent : e e
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 3/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
Pour les graphiques, commencez par re-dimensionner la fentre graphique e jusqu` ce que vous soyez satisfait du rsultat. Copier/coller ena e dans suite le graphique dans votre traitement de texte, puis re-dimensionnez le, de faon proportionnelle en x et y pour ne pas introduire de distorsions, c pour obtenir la taille nale dsire. e e entres dans la console, copiez/collez les dans le e Pour les commandes traitement de texte puis supprimez le caract`re dinvite de commande (par e dfaut le caract`re >) de la console . Ceci vous permettra ultrieuree e e ment de facilement copier/coller dans lautre sens, de votre traitement de e e texte vers 2 . Dnissez un style pour mettre en vidence quil sagit de commandes , par exemple en utilisant une police de caract`res non e proportionnelle, ventuellement de couleur rouge pour signier quil e en entre. e sagit de commandes Pour les rsultats obtenus dans la console, dnissez un style similaire ` e e a celui des entres, mais changez la couleur, par exemple en couleur bleue, e pour mettre en vidence quil sagit de rsultats, et non dentres. e e e Pour intgrer des rsultats numriques dans le corps du texte, il vous e e e faudra faire un copier/coller de plus, veillez ` maintenir la cohrence de a e lensemble ! Cette approche permet de gnrer facilement de petits documents de qualit, e e e mais elle trouve tr`s rapidement ses limites car il est extrmement fastidieux de e e maintenir la cohrence entre les dirents lments du rapport. Supposez par e e ee exemple que vous ayez envie de modier un graphique, pour par exemple lui rajouter un titre. Il vous faudra alors gnrer le graphique modi sous , mais e e e comme vous avez oubli de noter quelque part la dimension du priphrique e e e utilis dans la version prcdente, vous allez perdre du temps pour retrouver un e e e rsultat acceptable. Puis il faudra copier/coller le graphique dans le traitement e de texte, et de nouveau, le re-dimensionner ` la main (et encore une fois vous a navez pas not ce que vous aviez fait la derni`re fois, encore du temps perdu e e a a ` ttonner pour retrouver quelque chose d` peu pr`s similaire). Mais ce nest a e pas ni : le code nest plus cohrent avec le graphique, il faut une nouvelle e opration manuelle de copier/coller, et de remise en forme dans le traitement e de texte, pour assurer la cohrence. Et, bien entendu, si vous avez intgr des e e e rsultats numriques dans le corps du texte, il faudra une troisi`me opration e e e e manuelle de copier/coller pour mettre tout le document en cohrence. On arrive e tr`s rapidement aux limites de lexercice. e
3
3.1
La fonction Sweave() est une commande standard de qui permet dautomatiser la production de documents en intgrant directement le code source e dans le document, la cohrence globale est alors automatiquement assure. e e Comme Sweave() est une commande standard, il ny a rien de particulier ` a installer si vous avez dj` ea dinstall. Cependant, ceux qui travaillent sous e Windows doivent tre avertis de la note importante suivante : e
2 Vous pouvez le faire directement au niveau de la console en entrant la commande options(prompt = " ").
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 4/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
Sous Windows : ne pas installer dans le dossier "Program Files", cela pose des probl`mes ` L TEX pour grer les blancs dans les chemins dacc`s aux chiers. e a A e e
A En eet, Sweave() va gnrer un chier intermdiaire L TEX qui comportera e e e juste avant \begin{document} une directive du type3 :
\usepackage{/Library/Frameworks/R.framework/Resources/share/texmf/Sweave} \begin{document} a t insee pour utiliser le chier Sweave.sty qui est distribu avec . Si e tall dans le dossier "Program Files", cela posera un probl`me ` L TEX pour e e a A retrouver ce chier parce quil y aura une espace dans le chemin dacc`s. Dune e faon gnrale, il est beaucoup plus simple de travailler sous des syst`mes dexc e e e de faon c ploitations de type unix que sous Windows d`s que lon veut utiliser e professionnelle. Ce nest pas que cela soit impossible, le prsent document est e compilable sous Windows, mais il y a des analyses cot-bnce ` prendre en u e e a compte. Ces derni`res sont assez bien rsumes de faon humoristique dans le e e e c : folklore de
library(fortunes) fortune("Knoppix") Benjamin Lloyd-Hughes: Has anyone had any joy getting the rgdal package to compile under windows? Roger Bivand: The closest anyone has got so far is Hisaji Ono, who used MSYS (http://www.mingw.org/) to build PROJ.4 and GDAL (GDAL depends on PROJ.4, PROJ.4 needs a PATH to metadata files for projection and transformation), and then hand-pasted the paths to the GDAL headers and library into src/Makevars, running Rcmd INSTALL rgdal at the Windows command prompt as usual. All of this can be repeated, but is not portable, and does not suit the very valuable standard binary package build system for Windows. Roughly: [points 1 to 5 etc omitted] Barry Rowlingson: At some point the complexity of installing things like this for Windows will cross the complexity of installing Linux... (PS excepting live-Linux installs like Knoppix) -- Benjamin Lloyd-Hughes, Roger Bivand and Barry Rowlingson R-help (August 2004)
Dans la suite de ce document, nous supposerons que vous travaillez sous un syst`me de type unix. Il en existe des distributions libres. e
3.2
Pr-requis e
A Vous navez pas besoin de conna tre L TEX pour utiliser Sweave(), mais vous avez besoin davoir les outils ncessaires pour transformer un chier source e A A L TEX en un document PDF, par exemple pdfL TEX, qui est fourni avec la pluA part des distributions L TEX. Vriez que vous tes capable de compiler le petit e e A chier (mini.tex) source L TEX suivant : mini.tex \documentclass[a4paper]{article} \usepackage[latin1]{inputenc} \begin{document} \begin{Huge}Bonjour, ^ mon$\delta$e !\end{Huge} o \end{document}
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 5/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
1. Allez sur le site http://pbil.univ-lyon1.fr/R/donnees/ pour enregistrer une copie du chier mini.tex dans votre dossier de travail. Si vous navez pas de dossier de travail, crez en un. e 2. Ouvrez le chier mini.tex prsent dans votre dossier de travail avec votre e diteur de texte favori. Le codage des caract`res est en latin1 (ISO-8859-1), e e il peut tre ncessaire de lindiquer au moment de louverture du chier. e e 3. Vriez que dans votre diteur de texte que le caract`re est bien prsent e e e o e dans la quatri`me ligne : \begin{Huge}Bonjour, ^ mon$\delta$e !\end{Huge}. e o Si ce nest pas le cas, cest sans doute que votre diteur de texte na pas e ouvert le chier en latin1. Essayez encore. 4. Lancez la compilation en entrant la commande pdflatex mini.tex dans un terminal4 . Vous devez obtenir un document PDF dune page au format A4, numrote e e 1 en bas, et sur le haut de laquelle est crit en gros caract`res : e e
Bonjour, o mone !
Ce petit test vous permet de vrier deux choses : e
A 1. Vous tes capable de compiler un chier source L TEX qui contient des e caract`res accentus, comme ici le . e e o
2. Le caract`re grec delta minuscule, , est plaisant ` lire. En eet, par e a rapport ` la version initiale de 1986, le rendu du caract`re a t fora e ee tement amlior en 1992 (voir http://www-cs-faculty.stanford.edu/ e e ~uno/cm.html). Si le rendu du caract`re nest pas bon (cf ci-contre) , e A cest sans doute que votre version de L TEX est lg`rement obsol`te et quil e e e faut absolument faire une mise ` jour. a
laid
3.3
contient en standard un chier dexemple pour Sweave() qui sappelle Sweave-test-1.Rnw. Lancez les exemples de Sweave() avec :
4 Remarque : on peut aussi le faire directement sans sortir de mini.tex")
avec system("pdflatex
beau
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 6/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
example(Sweave, ask = FALSE) Sweave testfile <- system.file("Sweave", "Sweave-test-1.Rnw", package = "utils") Sweave ## enforce par(ask=FALSE) Sweave options(device.ask.default=FALSE) Sweave ## create a LaTeX file Sweave Sweave(testfile) Writing to file Sweave-test-1.tex Processing code chunks ... 1 : print term verbatim 2 : term hide 3 : echo print term verbatim 4 : term verbatim 5 : echo term verbatim 6 : echo term verbatim eps pdf 7 : echo term verbatim eps pdf Vous pouvez maintenant lancer LaTeX sur 'Sweave-test-1.tex' Sweave ## This can be compiled to PDF by Sweave ## Not run: tools::texi2dvi("Sweave-test-1.tex", pdf=TRUE) Sweave ## or outside R by Sweave ## R CMD texi2dvi Sweave-test-1.tex Sweave ## which sets the appropriate TEXINPUTS path. Sweave Sweave ## create an S source file from the code chunks Sweave Stangle(testfile) Writing to file Sweave-test-1.R Sweave ## which can be sourced, e.g. Sweave source("Sweave-test-1.R") [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [1] -0.448385261 -1.153393786 0.004526230 0.941152965 0.709870066 -0.506996953 [7] 0.664921651 -0.279653623 -1.761071346 -1.872803751 0.838177695 0.085461445 [13] 1.198015636 0.520078181 -2.030519006 3.437191494 0.227157076 0.235975436 [19] -0.872275630 0.791817401 One Sample t-test data: x t = 0.1295, df = 19, p-value = 0.8983 alternative hypothesis: true mean is not equal to 0 95 percent confidence interval: -0.5528859 0.6258105 sample estimates: mean of x 0.03646230 Sweave ## Don't show: Sweave if(!interactive()) unlink("Sweave-test-1*")
Si tout sest bien pass, vous devez avoir maintenant dans votre dossier e courant un chier Sweave-test-1.tex, ainsi quun certain nombre de chiers graphiques (au format eps et au format pdf) et un chier de commandes :
list.files(pattern = "Sweave-test-1") [1] "Sweave-test-1-006.eps" "Sweave-test-1-006.pdf" "Sweave-test-1-007.eps" [4] "Sweave-test-1-007.pdf" "Sweave-test-1.R" "Sweave-test-1.tex"
A Utilisez pdfL TEX pour compiler le chier Sweave-test-1.tex, vous devez obtenir un chier au format PDF de trois pages ressemblant ` ceci : a
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 7/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
Si vous tes arriv ` produire ce chier, cest que vous avez tous les outils e ea ncessaires pour utiliser Sweave() pour produire un rapport. e
3.4
Enregistrez une copie du chier mini2.rnw dans votre dossier de travail, disponible au mme endroit ` http://pbil.univ-lyon1.fr/R/donnees/. e a
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 8/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
Lextension rnw dsigne par convention un chier destin ` tre trait par e eae e la commande Sweave() de . Lancez la commande Sweave() en lui donnant comme argument le nom de ce chier :
Sweave("mini2.rnw") Writing to file mini2.tex Processing code chunks ... 1 : echo term verbatim (label=essai2plus2) Vous pouvez maintenant lancer LaTeX sur 'mini2.tex'
Vous pouvez alors compiler le chier intermdiaire mini2.tex qui a t ge ee e nr par Sweave() pour gnrer un document PDF contenant le texte suivant : ee e e
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 9/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
2 + 2 @ \end{document}
Notez quil y a maintenant deux fragments de code : 1. Le premier qui sappelle options et qui sert en autres ` supprimer le a caract`re dinvite de commande. e 2. Le deuxi`me qui sappelle essai2plus2 et qui calcule 2 + 2 comme pre e cdemment. e Compilez le chier mini3.tex, vous devez obtenir le rsultat suivant : e
3.5
Il est possible avec la commande \Sexpr{} dinsrer dans du texte la valeur e dune variable. Par exemple, le chier source mini4.rnw : mini4.rnw
\documentclass[a4paper]{article} \usepackage[latin1]{inputenc} \usepackage{color} \usepackage{pdfcolmk} \begin{document} \DefineVerbatimEnvironment{Sinput}{Verbatim}{formatcom = {\color[rgb]{0, 0, 0.56}}} \DefineVerbatimEnvironment{Soutput}{Verbatim}{formatcom = {\color[rgb]{0.56, 0, 0}}} <<options, echo = FALSE>>= options(prompt = " ", continue = " ", width = 85)
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 10/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
Fig. 1 Le syndrome de lencodage de la mort qui tue. Si dans votre document terminal vous obtenez des caract`res tranges en lieu et place des e e caract`res accentus, comme ci-dessus, cest quun des acteurs impliqu dans sa e e e production nest pas au courant du fait quil faut utiliser lencodage latin1. Qui est le coupable ? Il y a trois acteurs impliqus. Le premier cest votre diteur de e e texte favori, mais il ne peut pas tre incrimin puisque vous avez dj` russi ` e e ea e a A editer un texte avec des accents (cf pr-requis). Le deuxi`me, L TEX, ne peut e e pas non plus tre accus puisque vous avez dj` russi ` produire un texte e e ea e a avec des accents (cf pr-requis). Reste . Quand vous utilisez la commande e Sweave(), celle-ci va lire le chier *.rnw et crire le chier *.tex. Il faut aussi e lui dire dutiliser lencodage latin1. Pour ce faire il sut dentrer la commande options(encoding = "latin1") dans avant de lancer Sweave().
@ Le volume $V$ d'une sph`re de rayon $r$ est donn par : e e $$ V(r) = \frac{4}{3}\pi r^3 $$ <<volsphere>>= V <- function(r) 4/3*pi*r^3 V(1) @ Le volume d'une sph`re de rayon unit est donc de \Sexpr{V(1)}. e e \end{document}
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 11/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
Le volume V dune sph`re de rayon r est donn par : e e V (r) = V <- function(r) 4/3 * pi * r^3 V(1) [1] 4.18879 Le volume dune sph`re de rayon unit est donc de 4.18879020478639. e e 4 3 r 3
Si tout sest bien pass, tout ne devrait pas stre bien pass, vous devriez e e e normalement sourir ici du syndrome de lencodage la mort qui tue. Corrigez le probl`me si besoin est (cf gure 1). e Vous pouvez utiliser la fonction round() pour arrondir les rsultats, par e exemple \Sexpr{round(V(1), 2)} donnerait 4.19 dans le document nal. Ceci permet donc dinsrer une, et une seule, valeur obtenue par le calcul dans e directement dans le document nal. Mais il est galement possible dinsrer e e dans le document nal des tableaux, donc un grand nombre de valeurs, grace au package xtable. Nous ne donnerons quun exemple simple. Le chier source suivant : mini5.rnw
\documentclass[a4paper]{article} \usepackage[latin1]{inputenc} \begin{document} <<options, echo = FALSE>>= library(xtable) # pour pouvoir produire des tables LaTeX dans R data(crimtab) # pour charger le jeu de donnes (voir ?crimtab) e colnames(crimtab) <- as.numeric(colnames(crimtab))/2.54 # taille en pouces rownames(crimtab) <- as.numeric(rownames(crimtab))*10 # majeur en mmm crimtab[which(crimtab == 0, arr.ind = TRUE)] <- NA # pour virer les 0 crimtab <- crimtab[nrow(crimtab):1, ] # pour inverser l'ordre des lignes matable <- xtable(x = crimtab, label = "Student", caption = "Les donnes utilises par William Sealy Gosset, e e plus connu sous le nom de plume de 'Student' et du test statistique ponyme, e en 1908 (\\textit{Biometrika} \\textbf{6}, 1-25). La collecte des donnes a t faite par MacDonell en 1902 (\\textit{Biometrika} e e e \\textbf{1}, 177-227). Il s'agit d'une table de contingence obtenue en discrtisant la taille (exprime ici en pouces, soit 2.54 cm, et e e porte en colonne) et la longueur du majeur de la main gauche e (exprime ici en mm et porte en ligne) de 3000 criminels adultes e e de sexe m^le ecrous au pays de Galle et en Angleterre a la fin a e ` du XIX$\\mathrm{^e}$ si`cle. Voir \\texttt{?crimtab} pour plus e d'informations.") # Notez les doubles \\ ncessaires dans R, c'est la "double escape rule" e print(matable, file = "Student.tex", size = "tiny", NA.string = ".") # On veut des '.' au lieu des des NA @ \input{Student.tex} Les fameuses donnes utilises par Student sont prsentes dans la table \ref{Student}. e e e e \end{document}
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 12/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
Sweave("mini5.rnw") Writing to file mini5.tex Processing code chunks ... 1 : term verbatim (label=options) Vous pouvez maintenant lancer LaTeX sur 'mini5.tex'
Il se peut que dans votre document nal vous ayez table ? ? au lieu de table 1. Cest normal, nous avons fait rfrence ` la table dans le texte avec ee a \ref{Student} pour ne pas avoir ` nous proccuper de la numrotation des a e e A tables, cest le travail de L TEX, pas le notre. Mais pour pouvoir faire son travail A correctement, L TEX a besoin de compiler le document une premi`re fois pour e gnrer les tables, puis une deuxi`me fois pour rsoudre les rfrences. Il nous e e e e ee A sut donc dinvoquer L TEX une deuxi`me fois et les rfrences seront rsolues. e ee e
3.6
Inclusion de graphiques
Sweave() permet dinclure automatiquement des graphiques dans le document nal (yes !). Commencez par crer dans votre dossier de travail courant e un dossier nomm figs pour rassembler toutes les gures au mme endroit et e e viter dencombrer votre rpertoire avec trop de chiers5 . e e Le chier source suivant : mini6.rnw
\documentclass[a4paper]{article} \usepackage[latin1]{inputenc} \usepackage{color, pdfcolmk} \begin{document}
5 Mais il est aussi intressant de dsobir ` ces directives. A votre avis, si le dossier figs ` e e e a nexiste pas, il y aura-t-il un probl`me au moment de la compilation sous e ou bien un A probl`me au moment de la compilation avec L TEX ? e
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 13/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
\DefineVerbatimEnvironment{Sinput}{Verbatim}{formatcom = {\color[rgb]{0, 0, 0.56}}} \SweaveOpts{prefix.string = figs/essai, eps = FALSE, pdf = TRUE} \setkeys{Gin}{width=0.8\textwidth} Essayons de faire un histogramme : <<essaifig, echo = T, fig = T>>= hist(rnorm(1000), col = "pink") @ \end{document}
Frequency
0 4
50
100
150
0 rnorm(1000)
Quelques commentaires sur les instructions utilises ici. La ligne e \SweaveOpts{prefix.string = figs/essai, eps = FALSE, pdf = TRUE} sert ` dire que nous voulons ranger les chiers contenant les gures dans le a dossier figs et que leur nom commence par essai-, vous devez normalement avoir dans ce dossier un chier sappelant essai-essaifig.pdf :
list.files(path = "figs", pattern = "essaifig") [1] "essai-essaifig.pdf"
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 14/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
(essaifig), puis lextension .pdf pour signier quil sagit dun chier au format PDF. Notez que nous avons demand ` Sweave() de ne gnrer que des e a e e chiers PDF avec loption eps = FALSE, pdf = TRUE, parce que nous utilisons A ici pdfL TEX et que nous navons pas lutilit des chiers au format EPS. e Le fragment de code commence ici avec la ligne <<essaifig, echo = T, fig = T>>= qui signie que le fragment de code produit une gure (fig = T). Une erreur frquente consiste ` commencer un fragment de code avec loption e a fig = T mais que ce fragment de code ne produise en fait pas de gure. Le chier A PDF gnr sera alors vide, ce qui conduira ` une erreur quand pdfL TEX ese ee a sayera de linclure pour gnrer le document nal. e e Enn, la ligne \setkeys{Gin}{width=0.8\textwidth} sert ` contrler la taille du graphique dans le document nal. On signie ` a o a A L TEX que lon veut que le graphique occupe en largeur 80 % de la largeur dune ligne courante.
3.7
Voici une faon de procder pour contrler de faon ne et reproductible la c e o c dimension de vos graphiques. Commencez par mettre au point dans le mode interactif sous votre graphique. Le plus simple pour cela est de crer un e chier source de code appel par exemple mafigure.R que vous excutez e e avec source("mafigure.R"). Par exemple avec le chier suivant :
mafigure.R par(mfrow = c(1,2)) x <- rnorm(1000) hist(x, col = "lightblue", main = "Histogramme") boxplot(x, col = "lightblue", horizontal = TRUE, main = "Bo^te ` moustaches") a
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 15/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
source("mafigure.R")
Histogramme
Bote moustaches
Frequency
100
150
qqq q q
qqq q
0 4
50
0 x
Les dimensions gnrales du graphiques ne sont pas tr`s adaptes, on prfe e e e ee rerait avoir quelque chose de moins haut et de plus large. Quelque chose dans ce got : u
Histogramme
200
Bote moustaches
Frequency
100
150
qqqq q
q q q
0 3
50
0 x
Toujours dans le mode interactif sous , modiez ` la souris les dimensions a de la fentre graphique, peaunez le code source dans le chier mafigure.R, e jusqu` ce que vous soyez satisfait du rsultat. Utilisez alors la commande a e par("din") pour conna les dimensions de la fentre graphique. tre e
par("din") [1] 6.993274 6.994751
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 16/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
La premi`re valeur correspond ` la largeur, la deuxi`me ` la hauteur. Supe a e a posons que vous soyez satisfaits avec une largeur de 8 et une hauteur de 4. Le source suivant : mini7.rnw
\documentclass[a4paper]{article} \usepackage[latin1]{inputenc} \begin{document} \SweaveOpts{prefix.string = figs/essai, eps = FALSE, pdf = TRUE} \setkeys{Gin}{width=\textwidth} Je veux une figure de 8 units de large par 4 units de haut e e et qui tienne toute la largeur de la page dans le document final. <<essaifig, echo = F, fig = T, width = 8, height = 4>>= par(mfrow = c(1,2)) x <- rnorm(1000) hist(x, col = "lightblue", main = "Histogramme") boxplot(x, col = "lightblue", horizontal = TRUE, main = "Bo^te ` moustaches") a @ \end{document}
Je veux une gure de 8 units de large par 4 units de haut et qui tienne e e toute la largeur de la page dans le document nal.
Histogramme
200
Bote moustaches
Frequency
100
150
qq q
q q qq
0 3
50
0 x
4
4.1
Conclusion
Pour aller plus loin
Vous avez lessentiel des lments pour pouvoir produire un rapport intgrant ee e des rsultats obtenus avec . Vous trouverez sur le web des lments dinfore ee mation complmentaires sur Sweave(). Quelques pistes pour approfondir : e La FAQ de Sweave() ` http://www.ci.tuwien.ac.at/~leisch/Sweave/ a FAQ.html qui contient des liens vers la documentation (en anglais). Une tentative de traduction suit ci-apr`s. e
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 17/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
Larticle [2] de Friedrich Leisch, lauteur de Sweave() (en anglais) Une dmonstration de lutilisation de Sweave() ` http://www.stat.umn. e a edu/~charlie/Sweave/ (en anglais) google(Sweave) faire RSiteSearch("Sweave"). Sous A La mise en page des entres et sorties est faite par L TEX et le paquet e fancyvrb [5]. Nous avons dj` vu comment modier le style des entres ea e et sorties en modiant les environnements Sinput et Soutput. Ces deux environnements sont encapsuls dans lenvironnement Schunk, qui est luie mme modiable, par exemple, celui qui a t utilis dans ce document e ee e est donn ci-dessous. e Schunk.tex
% % Essai de modification de Schunk % \definecolor{gris10}{gray}{0.90} \fvset{listparameters={\setlength{\topsep}{0pt}}} \makeatletter\renewenvironment{Schunk}{ \vspace{\topsep} \noindent\begin{lrbox}{\@tempboxa}\begin{minipage}{\columnwidth}}{\end{minipage}\end{lrbox} \fcolorbox{black}{gris10}{\usebox{\@tempboxa}} }{ \vspace{\topsep} } \makeatother
4.2
` A propos dodfWeave
Il existe un paquet nom odfWeave [1] qui permet de gnrer des docue e e ments texte au format ODF6 au lieu de chiers au format PDF avec Sweave. Le fonctionnement est tr`s similaire ` celui de Sweave. Apr`s installation du e a e paquet, une commande du type :
odfWeave("mini2.odt", "mini2out.odt")
traitera les fragments de code du chier mini2.odt pour produire le chier mini2out.odt. Vous trouverez ` http://pbil.univ-lyon1.fr/R/donnees/ les a chiers dexemples suivants permettant de faire lquivalent de ce que nous avons e vu avec Sweave :
mini2.odt Calcul de 2 + 2. mini3.odt Calcul de 2 + 2 en couleur. mini4.odt Inclusion de rsultat simple dans le corps du texte. e mini5.odt Gnration dune table a partir de donnes. e e ` e mini6.odt Inclusion dune gure. mini7.odt Contrle de la taille des gures incluses. o
La principale dirence par rapport ` Sweave est que le document nal tant e a e au format ODF, il est tr`s facile de le modier avec un traitement de texte e comme OpenOffice. Le gros inconvnient est que lon na plus ` sa disposition e a A tous les outils de L TEX.
6 Open
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 18/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
Cette section est une traduction de la foire aux questions (FAQ) de Friedrich Leisch dans sa version du 4 janvier 2006. Pour une version plus ` jour se rfrer a ee au document source (en anglais).
5.1
La derni`re version du manuel est toujours disponible sur la page de base e de Sweave ` ladresse : http://www.ci.tuwien.ac.at/~leisch/Sweave Vous a trouverez galement sur ce site plusieurs chiers dexemples, ainsi que des frage ments de code utiles de la FAQ. Il y de plus plusieurs articles ` propos de Sweave a comme larticle dans CompStat [2] et deux articles de R News [3, 4].
5.2
Comment faire pour que Emacs reconnaisse automatiquement des chiers au format Sweave ?
Les versions rcentes de ESS (Emacs speaks statistics, http://ess.R-project. e org) reconnaissent automatiquement les chiers avec lextension .Rnw comme tant des chiers Sweave et activent les modes adquats. Suivre les instructions e e sur la page de base de ESS pour installer ESS sur votre ordinateur.
5.3
Il peut tre utile (par exemple pour crire des chiers de type makefile) de e e lancer Sweave directement ` partir dun interprteur de lignes de commandes a e puis dutiliser la fonction Sweave(). Ceci plutt que de lancer manuellement o peut tre ralis facilement avec un script du type : e e e #!/bin/sh echo "library(\"utils\"); Sweave(\"$1\")" | R --no-save --no-restore
A Une solution plus labore, qui encha en plus la compilation L TEX, a t e e ne ee crite par Gregor Gorjanc et est disponible ` : http://www.bfro.uni-lj.si/ e a MR/ggorjan/software/shell/Sweave.sh.
5.4
A Pourquoi est ce que L TEXne trouve pas mes gures EPS et PDF quand il y a un point dans le nom des chiers ?
A Sweave utilise pour grer les chiers graphiques le paquet L TEX standard e A graphicx. Ce paquet utilise automatiquement des chiers EPS pour du L TEXstandard A X si le nom du chier graphique ` inclure et des chiers PDF pour PDFL TE a ne comporte pas dextension (cest ` dire pas de point). Cest pour cela que a vous risquez davoir des probl`mes pour grer les graphiques si le nom de e e votre chier Sweave contient des points surnumraires : toto.Rnw est OK, mais e toto.bis.Rnw ne lest pas.
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 19/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
5.5
A A Le paquet L TEX graphicx ` besoin de chier EPS pour du L TEXpur, mais a A de chiers PDF pour PDFL TEX (ce dernier sachant galement grer des chiers e e PNG et JPEG). Sweave gn`re automatiquement des chiers EPS et PDF pour e e que lutilisateur puisse utiliser librement latex ou bien pdflatex pour produire son document nal.
5.6
Pourquoi les fragments de code sans gure donnent A une erreur L TEX ?
Quand un fragment de code avec fig=true ne fait appel ` aucune fonction a graphique de , des chiers EPS et PDF non valides sont produits. Sweave ne peut pas deviner si un fragment de code produit eectivement une gure ou non, il va essayer dinclure le chier graphique invalide, ce qui conduira A inluctablement ` une erreur lors de la compilation L TEX. e a
5.7
Les commandes dans le paquet lattice ont un comportement dirent e des commandes graphiques standard : les commandes lattice retournent un objet de la classe trellis, et leur achage eectif est eectu par la mthode e e print de cette classe. Il sut dencapsuler les appels aux fonctions dans un print(), par exemple : <<fig=TRUE>>= library(lattice) print(bwplot(1:10)) @
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 20/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
library(lattice) print(bwplot(1:10))
10
1:10
Les futures versions de Sweave auront peut tre des moyens plus automae tiques de traiter les graphiques du paquet lattice.
5.8
Quelle est la faon la plus lgante de produire des graphiques lattice en c ee noir et blanc en conjonction avec Sweave ? Comment faire pour que cette option soit globale pour toutes les gures du document ? Une rponse de Deepayan Sarkar : je fais quelque chose dans ce got dans e u linitilisation du document : <<...>> library(lattice) ltheme <- canonical.theme(color = FALSE) ## in-built B&W theme ltheme$strip.background$col <- "transparent" ## change strip bg lattice.options(default.theme = ltheme) ## set as default Essai :
library(lattice) ltheme <- canonical.theme(color = FALSE) ltheme$strip.background$col <- "transparent" lattice.options(default.theme = ltheme) data(sunspot.year) plot <- xyplot(sunspot.year ~ 1700:1988, xlab = "", type = "l", scales = list(x = list(alternating = 2)), main = "Yearly Sunspots") print(plot, position = c(0, 0.3, 1, 0.9), more = TRUE) print(update(plot, aspect = "xy", main = "", xlab = "Year"), position = c(0, 0, 1, 0.3))
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 21/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
Yearly Sunspots
1700 1750 1800 1850 1900 1950 2000
sunspot.year sunspot.year
150
100
50
1700 100 0
1750
1800
1850
1900
1950
2000
Year
5.9
Imaginions que vous vouliez produire plusieurs gures dans une boucle du type :
<<fig=TRUE>>= for(i in 1:4) plot(rnorm(100)+i) @
Ceci ne pourra pas marcher parce que Sweave nautorise quune seule gure par fragment de code. La raison en est que Sweave ouvre un priphrique e e graphique avant chaque fragment de code et le ferme juste apr`s. Mais si vous e avez besoin dinsrer tout une srie de graphiques vous pouvez y arriver en e e A gnrant du L TEX directement, par exemple : e e
<<results=tex,echo=FALSE,fig=F>>= for(i in 1:4){ fichier <- paste("figs/monfichier", i, ".pdf", sep = "") pdf(file = fichier) plot(rnorm(100) + i, main = paste("Graphique numro", i, sep = ":")) e dev.off() cat("\\noindent\\includegraphics[width=0.5\\textwidth]{", fichier, "}\n", sep="") } @
Essayons :
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 22/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
Graphique numro:1
q
Graphique numro:2
q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q qq q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q qq q q q q q q q q q q q q q q
q q q
q q q q
q q
q q q q q q q q q q q q q q q qq q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q qq q q q
q q q q q q q q q q
rnorm(100) + i
rnorm(100) + i
q q
q q q
q q q q
q q
q q
q q
q q
q q
20
40 Index
60
80
100
20
40 Index
60
80
100
Graphique numro:3
q
Graphique numro:4
7
q q
q q q q q
q q
q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q qq q q q q q q q q q q q q q q q qq q q q q q q q
q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q
q q
rnorm(100) + i
rnorm(100) + i
q q q
q q
q q q q
q q
q q q
q q
q q q q
20
40 Index
60
80
100
q q
20
40 Index
60
80
100
5.10
Comment ranger tous les chiers graphiques produits par Sweave dans un sous-dossier plutt quau o mme niveau que le chier Sweave ? e
Apr`s : \SweaveOpts{prefix.string=figs/toto}, Sweave rangera toutes e les gures dans le dossier figs et leur nom commenceront par toto (au lieu du nom du chier Sweave). Le dossier figs doit exister avant de lancer la fonction Sweave().
5.11
Comment changer les param`tres graphiques par() e pour plusieurs fragments de code ?
Comme chaque fragment de code graphique ouvre un nouveau priphrique e e EPS ou PDF, un appel ` par() naura deet que pour le fragment de code a courant. Si vous voulez changer les les valeurs par dfaut, il est plus facile de e dnir une fonction pour factoriser le code plutt que de rpter les mmes e o e e e appels ` par() dans chaque fragment de code graphique. a Leet de : <<...>>=
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 23/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
opar <- par(no.readonly = TRUE) options(SweaveHooks = list(fig = function() par(bg = "yellow", fg = "blue"))) @ rednit les param`tres graphiques bg et fg pour tous les fragments de code e e suivants. Noubliez de restaurer les valeurs par dfaut ` la n du chier Sweave e a sauf si vous voulez les utiliser comme option globale pour tous les documents Sweave. Essayons :
options(SweaveHooks = list(fig = function() par(bg = "yellow", fg = "blue"))) plot(rnorm(100))
q q q q q q q q q q q q q q q q q q q q q q
rnorm(100)
q q
q q q q q q q q qq q q q q q q q q q q q q q
q q q q q q q q q q q q q q q q q q q q q
q q
q q q q q q q q q
q qq
qq q q q
q q q q
20
40 Index
60
80
100
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 24/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
q q q
q q q
q q q q q
qq q q q q q q q q
q q
q q q
q q q q q q
rnorm(100)
q q q q q q q q q q q q q q q q q
q q
q q q q q q q q q q q q q
q q q q q q q
q q q
q q q q q q q q q q
q q
q q
q q
20
40 Index
60
80
100
5.12
Si vous pouvez crer le chier .tex en lanant la fonction Sweave() dans e c , mais que vous narrivez pas ` transformer le chier .tex en .dvi ou .pdf, a cest srement ` cause dune espace dans le chemin dacc`s de votre installation u a e de . Si le chemin dacc`s ` e a une espace cela peut poser des probl`mes parce e que les programmes comme tex ou latex ne g`rent pas bien les espaces dans e les chemins dacc`s. Deux solutions possibles : e 1. Installer a ` un endroit dont le chemin dacc`s ne poss`de pas despace. e e
A 2. Copier le chier Sweave.sty dans un dossier accessible par L TEXou dans le dossier qui contient votre chier Sweave et ajoutez une directive \usepackage{Sweave} dans le prambule de votre chier Sweave. e
5.13
A Sweave utilise le paquet L TEX fancyvrb pour formater toutes les entres et e sorties de code. Ce paquet est tr`s puissant et exible pour contrler nement e o de laspect du texte dans un environnement verbatim. Si vous voulez changer laspect par dfaut, lisez la documentation du paquet francyvrb et modiez les e dnitions des environnements Sinput et Soutput. e
5.14
Comment changer la longueur des lignes des entres e et sorties de fragments de code
Sweave utilise la faon standard de spcier la longueur des lignes de code c e avec options(width). Par exemple, apr`s options(width = 40) les lignes de e
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 25/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
code seront formates pour avoir, dans la mesure du possible, au plus 40 carace t`res. e
5.15
Le paquet R2HTML contient un pilote pour utiliser Sweave en conjonction A avec du HTML plutt que du L TEX. o
5.16
Le paquet R2HTML dnit un pilote Sweave pour les chiers au format HTML, e et apr`s cela la syntaxe pour lHTML vient avant celle de la syntaxe par dfaut e e dans liste des syntaxes explores. e options(SweaveSyntax=SweaveSyntaxNoweb) ou bien lappel de la fonction Sweave() par : Sweave(..., syntax=SweaveSyntaxNoweb) force lutilisation de la syntaxe par dfaut, mme apr`s avoir charg le paquet e e e e R2HTML.
5.17
Pourquoi Sweave enl`ve tous mes commentaires du e code ? Pourquoi est ce quil ne respecte pas mes sauts ` la ligne ? a
An de savoir o` insrer les sorties dans le code, Sweave() excute tous les u e e fragments de code via lanalyseur syntaxique de . Les fragments de code en entre que vous voyez sont le rsultat de lvaluation du code via les fonctions e e e parse() et deparse(), qui enl`vent tous les commentaires et reformattent les e retours ` la ligne. Loption keep.source=T vous permet de neutraliser ce coma portement, mais vous tes alors enti`rement responsable de la mise en page du e e code. Il y a essentiellement deux cas o` il est intressant de le faire : u e 1. Pour conserver les commentaires du code dans le document nal. 2. Pour viter de dborder ` droite dans le document nal quand vous avez e e a des arguments du type main = "Une_tr`s_longue_cha^ne_de_caract`res" e e qui sont mal grs dans le code. ee
Rfrences ee
[1] Max Kuhn and Steve Weaston. odfWeave : Sweave processing of Open Document Format (ODF) les, 2009. R package version 0.7.10. [2] F. Leisch. Sweave : Dynamic generation of statistical reports using literate data analysis. Proceedings in Computational Statistics, Compstat 2002 :575 580, 2002.
A [3] Friedrich Leisch. Sweave, part I : Mixing R and L TEX. R News, 2(3) :2831, December 2002.
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 26/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf
J.R. Lobry
[4] Friedrich Leisch. Sweave, part II : Package vignettes. R News, 3(2) :2124, October 2003.
A [5] T. Van Zandt. The fancyvrb Package. Fancy Verbatims in L TEX, 1998. http://ctan.tug.org/tex-archive/macros/latex/contrib/fancyvrb.
Logiciel R version 2.8.1 (2008-12-22) tdr78.rnw Page 27/27 Compil le 2009-04-19 e Maintenance : S. Penel, URL : http://pbil.univ-lyon1.fr/R/pdf/tdr78.pdf