268 votes

Outils pour créer des tableaux en latex dans R

A la demande générale, un wiki communautaire sur la production de tableaux latex en R. Dans ce billet, je vais donner un aperçu des paquets les plus couramment utilisés et des blogs avec du code pour produire des tableaux latex à partir d'objets moins simples. N'hésitez pas à ajouter ceux que j'ai manqués, et/ou à donner des conseils, des astuces et des petits trucs sur la façon de produire des tableaux latex joliment formatés avec R.

Packages :

  • xtable pour les tableaux standards de la plupart des objets simples. Une belle galerie avec des exemples peut être trouvée aquí .
  • memisc Outil pour la gestion des données d'enquête, contient quelques outils pour les tableaux latex d'estimations de modèles de régression (de base).
  • Hmisc contient une fonction latex() qui crée un fichier tex contenant l'objet de son choix. Il est assez flexible, et peut également produire longtable tables en latex. Il y a beaucoup d'informations dans le fichier d'aide. ?latex
  • miscFuncs possède une fonction ingénieuse, 'latextable', qui convertit les données matricielles avec des entrées mixtes alphabétiques et numériques en un tableau LaTeX et les imprime sur la console, afin qu'elles puissent être copiées et collées dans un document LaTeX.
  • texreg paquet ( Papier JSS ) convertit les résultats des modèles statistiques en tableaux LaTeX. Fusionne plusieurs modèles. Peut traiter environ 50 types de modèles différents, y compris les modèles de réseau et les modèles multiniveaux (lme et lme4).
  • reporttools paquet ( Papier JSS ) est une autre option pour les statistiques descriptives sur les variables continues, catégoriques et les dates.
  • tableaux est peut-être le paquet de création de tableaux LaTeX le plus général de R pour les statistiques descriptives.
  • stargazer permet de créer de beaux tableaux récapitulatifs de modèles statistiques comparatifs

Blogs et extraits de code

Questions connexes :

22voto

Spacedman Points 33792

J'aimerais ajouter une mention du paquet "brew". Vous pouvez écrire un fichier modèle brew, qui sera LaTeX avec des espaces réservés, puis le "brasser" pour créer un fichier .tex à destination de \include o \input dans votre LaTeX. Quelque chose comme :

\begin{tabular}{l l}
A & <%= fit$A %> \\
B & <%= fit$B %> \\
\end{tabular}

La syntaxe brew peut également gérer les boucles, de sorte que vous pouvez créer une ligne de tableau pour chaque ligne d'un cadre de données.

21voto

Ramnath Points 24798

Merci Joris d'avoir créé cette question. Nous espérons qu'elle sera transformée en wiki communautaire.

Les paquets booktabs en latex produisent des tableaux de belle apparence. Voici un article de blog qui explique comment utiliser xtable pour créer des tableaux latex qui utilisent des booktabs

J'ajouterais également le apsrtable au mélange, car il produit des tableaux de régression de belle apparence.

Une autre idée : Certains de ces paquets (en particulier memisc et apsrtable) permettent des extensions faciles du code pour produire des tables pour différents objets de régression. Un tel exemple est le code lme4 memisc montré dans la question. Il pourrait être judicieux de commencer un dépôt github pour collecter de tels extraits de code, et avec le temps, peut-être même les ajouter au paquet memisc. Des volontaires ?

18voto

Marek Points 612

Le site stargazer est une autre bonne option. Il supporte les objets de nombreuses fonctions et paquets couramment utilisés (lm, glm, svyreg, survival, pscl, AER), ainsi que ceux de zelig. En plus des tableaux de régression, il peut également produire des statistiques sommaires pour les cadres de données, ou produire directement le contenu des cadres de données.

15voto

PaulHurleyuk Points 3394

J'ai quelques astuces et contournements de "fonctionnalités" intéressantes d'xtable et de Latex que je vais partager ici.

Truc n°1 : Supprimer les doublons dans les colonnes et Astuce n°2 : Utiliser les onglets de livre

D'abord, charger les paquets et définir ma fonction propre

<<label=first, include=FALSE, echo=FALSE>>= 
    library(xtable)
    library(plyr)

    cleanf <- function(x){     
        oldx <- c(FALSE, x[-1]==x[-length(x)])  
        # is the value equal to the previous?    
        res <- x
        res[oldx] <- NA
        return(res)} 

Maintenant, générez de fausses données

data<-data.frame(animal=sample(c("elephant", "dog", "cat", "fish", "snake"), 100,replace=TRUE),
            colour=sample(c("red", "blue", "green", "yellow"), 100,replace=TRUE),
            size=rnorm(100,mean=500, sd=150),
            age=rlnorm(100, meanlog=3, sdlog=0.5))

    #generate a table
    datatable<-ddply(data, .(animal, colour), function(df) {
                return(data.frame(size=mean(df$size), age=mean(df$age)))
            })

Nous pouvons maintenant générer un tableau et utiliser la fonction clean pour supprimer les entrées en double dans les colonnes d'étiquettes.

cleandata<-datatable
cleandata$animal<-cleanf(cleandata$animal)
cleandata$colour<-cleanf(cleandata$colour)
@ 

c'est un xtable normal

<<label=normal, results=tex, echo=FALSE>>=
print(
    xtable(
        datatable
        ),
        tabular.environment='longtable',
        latex.environments=c("center"), 
        floating=FALSE, 
        include.rownames=FALSE
    )
@ 

Il s'agit d'un tableau normal où une fonction personnalisée a transformé les doublons en NA.

<<label=cleandata, results=tex, echo=FALSE>>=
print(
    xtable(
        cleandata
        ),
        tabular.environment='longtable',
        latex.environments=c("center"), 
        floating=FALSE, 
        include.rownames=FALSE
    )
@ 

Cette table utilise le paquet booktab (et a besoin d'un paquet \usepackage {booktabs} dans les en-têtes)

\begin{table}[!h] 
        \centering
        \caption{table using booktabs.}
        \label{tab:mytable}
<<label=booktabs, echo=F,results=tex>>= 
            mat <- xtable(cleandata,digits=rep(2,ncol(cleandata)+1))
            foo<-0:(length(mat$animal))
            bar<-foo[!is.na(mat$animal)]
            print(mat, 
                  sanitize.text.function = function(x){x},
                  floating=FALSE,
                  include.rownames=FALSE,
                  hline.after=NULL, 
                  add.to.row=list(pos=list(-1,bar,nrow(mat)), 
                  command=c("\\toprule ", "\\midrule ", "\\bottomrule ")))
  #could extend this with \cmidrule to have a partial line over
  #a sub category column and \addlinespace to add space before a total row
@

12voto

Ari B. Friedman Points 24940

Deux utilitaires du package taRifx peuvent être utilisés de concert pour produire des tableaux à plusieurs lignes d'hériarchies imbriquées.

library(datasets)
library(taRifx)
library(xtable)

test.by <- bytable(ChickWeight$weight, list( ChickWeight$Chick, ChickWeight$Diet) )
colnames(test.by) <- c('Diet','Chick','Mean Weight')
print(latex.table.by(test.by), include.rownames = FALSE, include.colnames = TRUE, sanitize.text.function = force)
#   then add \usepackage{multirow} to the preamble of your LaTeX document
#   for longtable support, add ,tabular.environment='longtable' to the print command (plus add in ,floating=FALSE), then \usepackage{longtable} to the LaTeX preamble

sample table output

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X