从R数据帧生成LaTeX输出

从R数据帧生成LaTeX输出,r,latex,sweave,R,Latex,Sweave,我正在Ubuntu上运行R v2.14.1。我正在编写一个脚本,它将生成一个数据帧,它表示一个结果表 我想将此“表”输出为.tex文件,以便创建“学术出版物”质量表,以便打印。我听说过Sweave(并阅读了一些关于Sweave的概述文档),所以我认为这是处理问题的方法。尽管如此,我还没有看到Swave以tex文件的形式输出数据帧的例子——到目前为止,我看到的所有Swave例子似乎都是人为的,而不是我可以建立的东西 我是否可以遵循一些准则,从数据帧输出tex?另外,如果直接从R脚本构建TeX字符串

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

我想将此“表”输出为.tex文件,以便创建“学术出版物”质量表,以便打印。我听说过Sweave(并阅读了一些关于Sweave的概述文档),所以我认为这是处理问题的方法。尽管如此,我还没有看到Swave以tex文件的形式输出数据帧的例子——到目前为止,我看到的所有Swave例子似乎都是人为的,而不是我可以建立的东西

我是否可以遵循一些准则,从数据帧输出tex?另外,如果直接从R脚本构建TeX字符串并将字符串保存到文件中,会更简单(更直接)吗?(我不清楚Swave除了“手动”构建TeX字符串之外还提供了什么。)

该软件包提供了一些如何生成表的示例-请参阅vignette。编写块时,请确保将块设置为
。例如,请参见

这就是我输出data.frame的方式

<<results=tex>>
    xtable(my.data.frame)
@
我经常使用和 来自软件包的函数,允许进行大量微调

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
库(Hmisc)

d就我个人而言,当我输出汇总表而不是编写报告时,我喜欢使用
cat()
sink()从R中管理所有代码,而不是从Rnw文件
这允许您在当前环境中工作,而不是在每次需要重新运行文档时强制加载和重新加载所有内容。此外,它还使使用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")

dat我找到的最佳解决方案是使用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")
下面是一个更快速、更脏的解决方案,它可以简单地重定向通常打印到控制台的文本输出:

sink("./Output.txt")
head(data)
sink()
您还可以使用cat()添加单独的注释

使用from
knitr
包将数据帧从R转换为LaTeX表。包允许进行更多微调


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


#玩具示例

df+1是一种有趣的方法。我一定会在某个阶段尝试一下。也可以看看knitr。它正在积极开发中,比Sweave更具灵活性。我认为Sweave代码中缺少“=”?
=
我试图在这里应用这个建议,将答案严重低估。可能是一个使用
kableExtra 功能将吸引更多未来读者。
sink("./Output.txt")
head(data)
sink()

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