从R数据帧生成LaTeX输出
我正在Ubuntu上运行R v2.14.1。我正在编写一个脚本,它将生成一个数据帧,它表示一个结果表 我想将此“表”输出为.tex文件,以便创建“学术出版物”质量表,以便打印。我听说过Sweave(并阅读了一些关于Sweave的概述文档),所以我认为这是处理问题的方法。尽管如此,我还没有看到Swave以tex文件的形式输出数据帧的例子——到目前为止,我看到的所有Swave例子似乎都是人为的,而不是我可以建立的东西 我是否可以遵循一些准则,从数据帧输出tex?另外,如果直接从R脚本构建TeX字符串并将字符串保存到文件中,会更简单(更直接)吗?(我不清楚Swave除了“手动”构建TeX字符串之外还提供了什么。)该软件包提供了一些如何生成表的示例-请参阅vignette。编写块时,请确保将块设置为从R数据帧生成LaTeX输出,r,latex,sweave,R,Latex,Sweave,我正在Ubuntu上运行R v2.14.1。我正在编写一个脚本,它将生成一个数据帧,它表示一个结果表 我想将此“表”输出为.tex文件,以便创建“学术出版物”质量表,以便打印。我听说过Sweave(并阅读了一些关于Sweave的概述文档),所以我认为这是处理问题的方法。尽管如此,我还没有看到Swave以tex文件的形式输出数据帧的例子——到目前为止,我看到的所有Swave例子似乎都是人为的,而不是我可以建立的东西 我是否可以遵循一些准则,从数据帧输出tex?另外,如果直接从R脚本构建TeX字符串
。例如,请参见
这就是我输出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()添加单独的注释使用fromknitr
包将数据帧从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)