Outils pour la fabrication de tables en latex en R [fermé]

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

colis:

  • xtable : pour tableaux standard de la plupart des objets simples. Une belle galerie avec des exemples peut être trouvé ici .
  • memisc : outil pour la gestion des données d'enquête, contient certains outils pour les tables de latex des estimations de modèle de régression (de base).
  • Hmisc contient une fonction latex() qui crée un fichier tex contenant l'objet de choix. Il est assez flexible, et peut également sortie longtable tables en latex. Il y a beaucoup d'information dans le fichier d'aide ?latex
  • miscFuncs a une fonction soignée "latextable" qui convertit les données de matrice avec des entrées alphabétiques et numériques mélangées dans une table de LaTeX et les imprime à la console, de sorte qu'ils peuvent être copiés et collés dans un document de LaTeX.
  • texreg package ( JSS papier ) permet de convertir le modèle statistique de sortie dans les tables en LaTeX. Fusionne plusieurs modèles. Peut faire face à 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 package ( JSS paper ) est une autre option pour les statistiques descriptives sur les variables continues, catégoriques et de date.
  • tables package est peut-être le plus général de LaTeX table de prise de package R pour statistiques descriptives
  • stargazer paquet fait beau statistique comparative sommaire du modèle de tables

les Blogs et les extraits de code

  • il y a la fonction outreg de Paul Johnson qui donne des tables de type Stata en Latex pour la sortie de régressions. Celui-ci fonctionne super.
  • comme indiqué dans une question précédente, il y a un code extrait de adapter le paquet memisc pour les objets lme4 .

questions connexes:

  • Suggestion pour r / LaTeX table creation package
  • Rreport/LaTeX de qualité, sortie package
  • tri d'une table pour la sortie de latex avec xtable
  • de quelque manière que ce soit pour produire une table LaTeX à partir d'un objet lme4 mer model fit?
  • R données.cadre avec empilé titres spécifiés pour la sortie latex avec xtable
  • "1519830920 de l'Automatisation de l'ajout de tables rapide de latex de R , avec un très souple et très intéressante de la syntaxe à l'aide de la formule de la langue
265
demandé sur Joris Meys 2011-03-29 01:31:11

8 réponses

j'aimerais ajouter une mention du paquet" brew". Vous pouvez écrire un fichier de template de brew qui serait LaTeX avec des placeholders, et ensuite "brew" il jusqu'à créer un .fichier tex \inclure ou \entrée 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, vous pouvez donc créer une rangée de table pour chaque rangée d'une dataframe.

23
répondu Spacedman 2011-03-28 21:50:34

remercie Joris d'avoir créé cette question. Avec un peu de chance, il sera transformé en wiki communautaire.

les paquets booktabs en latex produisent de belles tables. Voici un billet de blog sur la façon d'utiliser xtable à créer des tables en latex qui utilisent des livres

je voudrais aussi ajouter le paquet apsrtable au mélange car il produit de belles tables de régression.

une autre idée: certains de ces paquets (esp. memisc et apsrtable) permettent des extensions faciles du code pour produire des tableaux pour différents objets de régression. Un tel exemple est le code memisc de lme4 indiqué dans la question. Il pourrait être logique de démarrer un dépôt github pour collecter de tels extraits de code, et au fil du temps peut-être même l'ajouter au paquet memisc. Les élèves?

22
répondu Ramnath 2011-03-28 21:42:35

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

20
répondu user1953965 2013-01-07 04:43:42

j'ai quelques astuces et solutions pour intéressantes "caractéristiques" de xtable et Latex que je vais partager ici.

truc n ° 1: Suppression des doublons dans les colonnes et Truc N° 2: Utilisation D'étiquettes de livres

d'abord, charger les colis 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érer 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)))
            })

maintenant nous pouvons générer une table, et utiliser la fonction clean pour supprimer 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 xtable normal où une fonction personnalisée a transformé les duplicata en NA

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

ce tableau utilise le paquet booktab (et nécessite un \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
@ 
16
répondu PaulHurleyuk 2012-06-11 22:31:44

deux utilitaires dans le paquet taRifx peuvent être utilisés de concert pour produire des tables à plusieurs rangées de héritarchies 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

13
répondu Ari B. Friedman 2011-07-31 22:30:21

... et Astuce # 3 entrées multilignes dans un Xtable

générer plus de données

moredata<-data.frame(Nominal=c(1:5), n=rep(5,5), 
        MeanLinBias=signif(rnorm(5, mean=0, sd=10), digits=4), 
        LinCI=paste("(",signif(rnorm(5,mean=-2, sd=5), digits=4),
                ", ", signif(rnorm(5, mean=2, sd=5), digits=4),")",sep=""),
        MeanQuadBias=signif(rnorm(5, mean=0, sd=10), digits=4), 
        QuadCI=paste("(",signif(rnorm(5,mean=-2, sd=5), digits=4),
                ", ", signif(rnorm(5, mean=2, sd=5), digits=4),")",sep=""))

names(moredata)<-c("Nominal", "n","Linear Model \nBias","Linear \nCI", "Quadratic Model \nBias", "Quadratic \nCI")

maintenant produire notre xtable, en utilisant la fonction d'assainissement pour remplacer les noms de colonne avec les commandes Latex newline correctes (y compris Double backslashes donc R est heureux)

<<label=multilinetable, results=tex, echo=FALSE>>=
foo<-xtable(moredata)
align(foo) <- c( rep('c',3),'p{1.8in}','p{2in}','p{1.8in}','p{2in}' )
print(foo, 
            floating=FALSE, 
            include.rownames=FALSE,
            sanitize.text.function = function(str) {
                str<-gsub("\n","\\", str, fixed=TRUE)

                return(str)
            }, 
            sanitize.colnames.function = function(str) {
                str<-c("Nominal", "n","\centering Linear Model\\ \% Bias","\centering Linear \\ 95\%CI", "\centering Quadratic Model\\ \%Bias", "\centering Quadratic \\ 95\%CI \tabularnewline")
                return(str)
            })
@  

(bien que ce ne soit pas parfait, car nous avons besoin de \ tabularnewline pour que la table soit formatée correctement, et xtable encore met dans un final \, de sorte que nous nous retrouvons avec une ligne vide au-dessous de l'en-tête du tableau.)

6
répondu PaulHurleyuk 2011-03-29 12:45:35

vous pouvez également utiliser la fonction latextable du paquet r micsFuncs:

http://cran.r-project.org/web/packages/miscFuncs/index.html

latextable (M) où M est une matrice avec des entrées combinées alphabétiques et numériques Sorties une table de LaTeX de base sur l'écran, qui peut être copié et collé dans un document de LaTeX. Lorsqu'il y a de petits nombres, il remplace également ceux-ci par une notation d'index (par exemple 1.2x10^{-3}).

6
répondu Benjamin Taylor 2011-12-22 08:59:24

un autre paquet R pour agréger les modèles de régression multiple dans les tables de LaTeX est texreg .

6
répondu Philip Leifeld 2012-07-31 18:14:40