2012-02-14 87 views
14

我在Ubuntu上运行R v2.14.1。我正在编写一个脚本,它将生成一个数据框,它代表一个结果表。从R数据帧生成LaTeX输出

我想输出这个'表'作为一个.tex文件,以便我可以创建一个'学术刊物'质量表,用于打印。我听说过Sweave(并且阅读了关于Sweave的一些概述文档) - 所以我认为这是前进的方式。然而,我没有真正看到Sweave将数据框输出为tex文件的例子 - 迄今为止我所见过的所有Sweave例子都显得有些做作,并且我不能构建。

是否有一些指导原则可以遵循,从数据框中输出tex?另外,如果我直接从我的R脚本构建TeX字符串并将字符串保存到文件,它会更简单(更直接)吗? (我不清楚,Sweave提供的手动构建TeX字符串的手段)。

+0

还检查了knitr这是正在积极发展,并具有比更大的灵活性Sweave。 – 2012-02-15 00:43:23

回答

22

xtable包中有一些如何生成表的示例 - 请参阅小插曲。当你写一个块的时候,确保你把块设置为<<results=tex>>。见Sweave example,例如,this

这是我将如何输出data.frame。

<<results=tex>> 
    xtable(my.data.frame) 
@ 

和原始结果将看起来是这样的:

> xtable(my.data.frame) 
% latex table generated in R 2.14.1 by xtable 1.6-0 package 
% Tue Feb 14 10:03:03 2012 
\begin{table}[ht] 
\begin{center} 
\begin{tabular}{rllr} 
    \hline 
& p & q & r \\ 
    \hline 
1 & condition\_a & grp\_1 & 3 \\ 
    2 & condition\_a & grp\_1 & 3 \\ 
    3 & condition\_a & grp\_1 & 4 \\ 
    4 & condition\_a & grp\_1 & 1 \\ 
    5 & condition\_b & grp\_1 & 4 \\ 
    6 & condition\_b & grp\_1 & 3 \\ 
    7 & condition\_b & grp\_1 & 5 \\ 
    8 & condition\_b & grp\_1 & 5 \\ 
    9 & condition\_a & grp\_2 & 4 \\ 
    10 & condition\_a & grp\_2 & 1 \\ 
    11 & condition\_a & grp\_2 & 1 \\ 
    12 & condition\_a & grp\_2 & 1 \\ 
    13 & condition\_b & grp\_2 & 5 \\ 
    14 & condition\_b & grp\_2 & 1 \\ 
    15 & condition\_b & grp\_2 & 5 \\ 
    16 & condition\_b & grp\_2 & 2 \\ 
    \hline 
\end{tabular} 
\end{center} 
\end{table} 
+0

我认为'='在Sweave代码中缺失吗?<> =' – elevendollar 2016-09-29 16:14:10

+0

我试图在此处应用此提议https://unix.stackexchange.com/q/366637/16920 – 2017-05-30 19:37:58

15

我经常使用来自Hmisclatexdescribe 功能,这让很多微调。

library(Hmisc) 
d <- data.frame(a=LETTERS[1:5], x=rnorm(5)) 
latex(d, file="")   # If you want all the data 
latex(describe(d), file="") # If you just want a summary 
+0

+1有趣的方法,我一定会在某个阶段尝试。 – 2012-02-14 17:32:10

4

就个人而言,我喜欢R内管理我所有的代码,而不是一个RNW文件,当我输出汇总表,而不是写报告,通过使用cat()sink()这允许您从当前内工作环境,而不是在每次需要重新运行文档时强制加载和重新加载所有内容。另外,它使R更容易通过大量数据或数据列表来“复制”,“粘贴”或“循环”。应该指出,这有点打破了可重复研究的想法。

这里是什么,我将提出一个R档(记住,当然一个例子\需要转义\:

dat <- list() 
for(i in 1:15) { 
    dat[[i]] <- sample(c("A","B"),1000,replace=TRUE) # Dummy data 
} 

sink("temp.Rnw") 

cat(" 
\\documentclass{article} 
\\usepackage{Sweave} 
\\begin{document} 
") 

# Print a lot of tables 
invisible(
    lapply(dat, 
     function(x) 
     print(xtable(table(x),caption=names(x)),table.placement="!htp")) 
) 

cat(" 
\\end{document} 
") 

sink() 
Sweave("temp.Rnw") 
compilePdf("temp.Rnw")