Articles - R

R et LaTeX: Sweave avec Rstudio

  |   4786  |  R

    Sweave, un m?lange de R et du code LATEX, permet de g?n?rer automatiquement un document contenant du code R, les r?sultats de ces codes et des commentaires. Ceci permet un gain de temps tr?s important permettant de g?n?rer des analyses reproductibles en cas d??ventuel changement des donn?es.


    Un article sur LaTeX est disponible en suivant ce lien : http://www.sthda.com/articles/articles-19-53+latex.php


    Logiciels r?quis



    Il faudrait installer R, RStudio et les outils Latex ( http://latex-project.org/ftp.html).

    Proc?dure



    1- A partir de Rstudio, cr?er un fichier .Rnw en cliquant sur Fichier -> Nouveau -> R Sweave -> ?crire et enregistrez votre document : myfile.Rnw
    2- Compiler votre fichier en .pdf

    Lors de la compilation le fichier myfile.Rnw est tout d'abord converti en fichier LaTeX myfile.tex

    Squelette du fichier *.Rnw



    Les codes R sont inclus entre les balises <<>>= et @ qui d?finissent ce que l'on appelle "chunk" :

    Code LATEX :
     
    \documentclass[a4paper]{article}
    \title{Titre de mon document}
    \author{A Kass}
    \usepackage[latin1]{inputenc} % Encodage pour ?criture de document en fran?ais
    \begin{document} %D?but du document
    \maketitle %Permet la cr?ation d'une page de garde (Autheur, Titre, Date)
    .
    .
    <<>>=
    VOTRE CODE R ICI
    @
    .
    .
    \end{document} %Fin du document
     



    Les options basiques du chunk (morceaux de codes R)



    label : nom du chunk
    echo : TRUE/FALSE. Affichage des commandes. Si TRUE, le code est affich?. Valeur par d?faut : TRUE.
    fig : TRUE/FALSE. Cr?ation d'un figure. Si TRUE, le graphique cr?? par le code est inclus. Valeur par d?faut : FALSE.
    eval: TRUE/FALSE. Si FALSE, le morceau de code n'est pas ex?cut?. Valeur par d?faut : TRUE.
    results: verbatim/hide/tex. Affichage des r?sultats des commandes. Si verbatim, le r?sultat est affich? comme dans l'environnement R. Si tex, le r?sultat du code est consid?r? comme du Latex et il est inclus comme tel. Si hide, le code est ex?cut? mais le r?sultat est non affich?. Valeur par defaut : verbatim.
    prefix:TRUE/FALSE. If TRUE, les figures g?n?r?es et l'output ont le m?me prefix. Valeur par d?faut : TRUE.
    prefix.string: prefix des fichiers g?n?r?s. La valeur par d?faut est le nom du fichier .Rnw.
    include: TRUE/FALSE. Indique si le r?sultat text ou figure doit ?tre int?gr? automatiquement. Utilisez include=FALSE, si le r?sultat doit appara?tre ? un endroit diff?rent du morceau de code (en pla?ant le r?sulat manuellement).
    eps: TRUE/FALSE. G?n?re des figures EPS.
    width: Largeur des figures en inch (6).
    height:Hauteur des figures en inch (6).



    Les options peuvent ?tre configur?es globalement au d?but du fichier (et peuvent ?tre chang?es ailleurs au cas par cas) en utilisant la commande :
    \SweaveOpts(option1=value1,option2=value2,...)

    Les options width et height correspondent ? la taille du graphique g?n?r? par R. Elles ne correspondent pas ? la taille du graphique inclus dans le document Latex.

    Pour changer la taille de la figure incluse dans le Latex, utiliser la commande :
    \setkeys{Gin}{width=0.8\textwidth} et changer 0.8 avec une autre valeur.
    On peut ?galement changer la taille manuellement en utilisant la commande d'inclusion manuelle: \includegraphics





    Exemple 1: Test statistique et graphique



    Code LATEX :
     
    \documentclass[a4paper]{article}
    \title{Sweave Example 1}
    \author{Alboukadel Kassambara}
    \begin{document}
    \SweaveOpts{concordance=TRUE}
    \maketitle
    Dans cet exemple, nous allons inclure un exemple du test kuskal wallis et un boxplot analysant le param?tre ozone en fonction du mois:
     
    <<>>=
    data(airquality)
    kruskal.test(Ozone ~ Month, data = airquality)
    @
    La table contient \Sexpr{nrow(airquality)} lignes et \Sexpr{ncol(airquality)} colonnes.
    Le test montre que la distribution du param?tre Ozone varie significativement de mois en mois. 
    Enfin, nous incluons le boxplot des donn?es :
    \begin{center}
    <<label=figure1, fig=TRUE,echo=FALSE>>=
    boxplot(Ozone ~ Month, data = airquality)
    @
    \end{center}
    \end{document}
     


    \Sexpr{} (comme dans l'exemple 1) permet d?ex?cuter du code R dans la documentation.

    Resultat-Sweave-example-1


    Exemples 2 : Positionnement manuel d'une figure



    Dans cet exemple la figure n'est pas positionn?e ? l'endroit du code ex?cut?. Elle est plac?e manuellement, un peu plus bas, dans le document LaTeX.


    Code LATEX :
     
    \documentclass[a4paper]{article}
    \title{Sweave Exemple 2}
    \begin{document}
    \SweaveOpts{concordance=TRUE, prefix.string=sthda}
    \maketitle
    <<label=histx,fig=TRUE,include=FALSE>>=
    x<-rnorm(1000)
    hist(x, col="lightblue", border="darkblue")
    @
    Dans cet exemple la figure n'est pas positionn?e ? l'endroit du code ex?cut?. Elle est plac?e manuellement, un peu plus bas, dans le document Latex.
    \begin{figure}[h!]
    \includegraphics[width=5in]{sthda-histx}
    \caption{Histogram of x.} \label{histogram-x}
    \end{figure}
    \end{document}
     



    Lorsqu'on utilise \begin{figure}, la figure commence sur une nouvelle page. Pour ?viter cela, utilisez \begin{figure}[h!]



    Cliquez ici pour voir le PDF



    Plusieurs graphiques dans un chunk



    Il faudrait utiliser pdf() ou postscript () pour les cr?er et puis les ajouter dans le Latex.

    Code LATEX :
     
    \begin{center}
    <<results=tex, echo=FALSE>>=
    set.seed(672)
    for(i in 1:4){
    file=paste("myfile", i, ".pdf", sep="")
    pdf(file=file, paper="special", width=6, height=6)
    plot(rnorm(100)+i)
    dev.off()
    cat("\\includegraphics[height=2in, width=2in]{"
    , file, "}\n", sep="")
    }
    @
    \end{center}
     

    Rappeler un morceau de code R par son nom


    Code LATEXT :
     
    <<a>>=
    x <- 10
    @
    <<b>>=
    x+y
    @
    <<c>>=
    <<a>>
    y <- 20
    <<b>>
    @



    Les figures



    Code LATEX :
     
    \begin{figure}
    \begin{center}
    <<label=fig1,fig=TRUE,echo=FALSE>>=
    hist(rnorm(1000,0,1)
    @
    \end{center}
    \caption{Scatter Plot with Regression Line}
    \label{fig:one}
    \end{figure}
     


    Les tables



    Installer le package xtable :
    Code R :
    install.packages("xtable")


    Code LATEX :
     
    <<results=tex>>=
    library(xtable)
    x <- rnorm(100)
    y <- 4 + 3 * x + rnorm(100, 0, 2)
    lmodel <- lm(y ~ x)
    lan <- anova(lmodel)
    xtable(lmodel, caption = "La legende.",
    label = "tab:coef" )
    @
     


    Il est possible de faire reference a la table en utilisant le code :
    \ref{tab:coef} dans le code LATEX.





    Exemple 3 : R?f?rencement des Tables et Figures dans la documentation



    Code LATEX :
     
    \documentclass[a4paper]{article}
    \begin{document}
    \SweaveOpts{concordance=TRUE}
    <<echo=false,results=hide>>=
    library(lattice)
    library(xtable)
    data(cats, package="MASS")
    @
    A linear regression model of heart weight by sex and gender can be
    fitted in R using the command
    <<>>=
    lm1 = lm(Hwt~Bwt*Sex, data=cats)
    lm1
    @
    Tests for significance of the coefficients are shown in
    Table~\ref{tab:coef}, a scatter plot including the regression lines is
    shown in Figure~\ref{fig:cats}.
    \SweaveOpts{echo=false}
    <<results=tex>>=
    xtable(lm1, caption="Linear regression model for cats data.",
    label="tab:coef")
    @
    \begin{figure}
    \centering
    <<fig=TRUE,width=12,height=6>>=
    trellis.par.set(col.whitebg())
    print(xyplot(Hwt~Bwt|Sex, data=cats, type=c("p", "r")))
    @
    \caption{The cats data from package MASS.}
    \label{fig:cats}
    \end{figure}
    \begin{center}
    \end{center}
    \end{document}
     




    Cliquez ici pour voir le PDF



    Extraction du code R ? partir d'un document Latex



    La commande suivante permet d'extraire tous les codes R d'un fichier Latex :

    Code R :
    Stangle("myfile.Rnw")

    Un fichier .R est cr??.


    Une fonction R pour compiler du Sweave en pdf



    Code R :
     
    #usage :  ezSweave("sweave-example-4", preview=T)
    ezSweave<-function(filename, extension='Rnw', preview=TRUE, encoding="ISO-8859-1")
    {
      Sweave(paste(filename,".", extension,sep=''), encoding=encoding)
      library(tools)
      texi2dvi(paste(filename,".tex",sep=''), pdf=TRUE)
      if (preview)
      {
        system(paste(options('pdfviewer')[[1]],' ',filename,'.pdf',sep=''))
      }
    }
     


    Divers



    Sweaveinput{AnotherFile.Rnw}
    : Inclusion d'un autre fichier . Analogue ? la commande Latex \input ou \include
    SweaveOpts{keep.source=TRUE} : Permet de garder les commentaires dans le code
    SweaveOpts{} : Permet de changer les options par d?faut

    Licence - Pas d?Utilisation Commerciale - Partage dans les M?mes Conditions
    Licence Creative Commons