在这篇文章中,我将概述最常用的包和博客,其中包含从不太直接的对象生成latex表的代码。请随意添加任何我错过的,和/或给提示,提示和小技巧,如何用R生成漂亮的乳胶表。

包:

xtable : for standard tables of most simple objects. A nice gallery with examples can be found here. memisc : tool for management of survey data, contains some tools for latex tables of (basic) regression model estimates. Hmisc contains a function latex() that creates a tex file containing the object of choice. It is pretty flexible, and can also output longtable latex tables. There's a lot of info in the help file ?latex miscFuncs has a neat function 'latextable' that converts matrix data with mixed alphabetic and numeric entries into a LaTeX table and prints them to the console, so they can be copied and pasted into a LaTeX document. texreg package (JSS paper) converts statistical model output into LaTeX tables. Merges multiple models. Can cope with about 50 different model types, including network models and multilevel models (lme and lme4). reporttools package (JSS paper) is another option for descriptive statistics on continuous, categorical and date variables. tables package is perhaps the most general LaTeX table making package in R for descriptive statistics stargazer package makes nice comparative statistical model summary tables

博客和代码片段

Paul Johnson的outreg函数在Latex中为回归的输出提供了类似stata的表。这个很好用。 正如在前面的问题中所给出的,有一个代码片段用于为lme4对象调整memisc包。

相关问题:

R/LaTeX表创建包的建议 Rreport/LaTeX质量输出包 使用xtable对latex输出的表进行排序 有办法从lme4 mer模型拟合对象产生一个LaTeX表吗? R data.frame与堆叠指定标题乳胶输出与xtable 从R自动向latex快速添加表,使用公式语言提供非常灵活和有趣的语法


当前回答

我想再提一下“酿造”包。您可以编写一个带有占位符的LaTeX模板文件,然后“酿造”它以创建一个.tex文件,以\include或\input到您的LaTeX中。喜欢的东西:

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

brew语法还可以处理循环,因此可以为数据框架的每一行创建一个表行。

其他回答

感谢Joris提出这个问题。希望它能成为一个社区维基。

在乳胶的booktabs包产生好看的表格。这是一篇关于如何使用xtable创建使用图书标签的乳胶表的博客文章

我还会将apsrtable包添加到组合中,因为它可以生成漂亮的回归表。

另一个想法:其中一些包(特别是memisc和apsrtable)允许简单地扩展代码,为不同的回归对象生成表。问题中显示的lme4 memisc代码就是这样一个例子。开始一个github存储库来收集这样的代码片段可能是有意义的,随着时间的推移,甚至可能将其添加到memisc包中。什么人吗?

你也可以使用R包micsFuncs中的latextable函数:

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

latextable(M),其中M是一个混合字母和数字条目的矩阵,输出一个基本的LaTeX表到屏幕上,可以复制和粘贴到LaTeX文档中。如果有小数字,它也用索引符号替换这些数字(例如1.2x10^{-3})。

观星包是另一个不错的选择。它支持来自许多常用函数和包(lm、glm、svyreg、survival、pscl、AER)以及来自zelig的对象。除了回归表,它还可以输出数据帧的汇总统计,或者直接输出数据帧的内容。

另一个用于将多个回归模型聚合到LaTeX表中的R包是texreg。

我有一些关于xtable和Latex有趣的“特性”的技巧和工作,我将在这里分享。

技巧#1:删除列中的重复项和技巧#2:使用书签

首先,加载包并定义clean函数

<<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)} 

现在生成一些假数据

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)))
            })

现在我们可以生成一个表,并使用clean函数删除标签列中的重复项。

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

这是一个普通的xtable

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

这是一个普通的xtable,其中一个自定义函数已经将副本转换为NA

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

这个表使用booktab包(并且在头文件中需要一个\usepackage{booktabs})

\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
@