从R数据帧生成LaTeX输出

时间:2012-02-14 08:54:11

标签: r latex sweave

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

我想将此'table'作为.tex文件输出,以便我可以创建一个'学术出版物'质量表,用于打印。我听说过Sweave(并阅读了一些关于Sweave的概述文档) - 所以我认为这是继续进行的方式。然而,我已经说过我没有看到一个示例,其中Sweave将数据帧输出为tex文件 - 到目前为止我看到的所有Sweave示例似乎都是人为的,而不是我可以构建的东西。

我可以遵循一些指导方针,从数据框输出tex吗?另外,如果我直接从我的R脚本构建TeX字符串并将字符串保存到文件,它会更简单(更直接)吗? (我不清楚,Sweave除了手动构建TeX字符串之外还提供了什么。)

5 个答案:

答案 0 :(得分:27)

xtable包中有一些如何生成表的示例 - 请参阅插图。在编写块时,请确保将块设置为<<results=tex>>。例如,请参阅Sweave examplethis

这就是我输出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}

答案 1 :(得分:17)

我经常使用latexdescribe 来自Hmisc包的函数,可以进行大量的微调。

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

答案 2 :(得分: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")

答案 3 :(得分:0)

我发现最好的解决方案是使用R包xtable。您可以非常轻松地生成

的LaTeX格式的文件
x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
y <- c(10, 20, 30, 40, 50, 60, 70, 80, 90)
df <- data.frame("x"=x, "y"=y)
print.xtable(xtable(head(df)), file = "./Data.txt")

然后您可以通过以下方式将“ Data.txt”的内容添加到LaTeX文件中:

\input{./Data.txt}

一种更快捷,更脏的解决方案,仅将通常打印到控制台的文本输出重定向如下:

sink("./Output.txt")
head(data)
sink()

您还可以使用cat()添加个人评论

答案 4 :(得分:0)

使用knitr包中的kable()将数据帧从R转换为LaTeX表。kableExtra包允许进行更多的微调。


# Toy example 
df <- tibble(x = c(1:3), 
             y = c(4:6))

# Plain latex output 
kable(df, "latex")

# With Booktabs 
kable(df, "latex", booktabs = TRUE)