我有一个data.frame
,它是科学海报的漂亮PDF表格。尽管通过pdf()
导出图非常容易,但是我对这张表很执着。
我知道如何使用rmarkdown获取PDF表,例如
---
output: pdf_document
---
```{r tab, echo=FALSE, results='asis'}
library(xtable)
xtable(head(mtcars))
```
但是我想要直接 从R脚本中获取此输出,例如
renderThisToPDF(xtable(head(mtcars), to="nicetable.pdf") # fantasy code
我该怎么做?
到目前为止,我尝试通过writeLines
code <- "library(xtable)\nprint(xtable(head(mtcars)))"
fileConn <- file("output.Rmd")
writeLines(cat("---\noutput: pdf_document\n---\n```{r tab, echo=FALSE, results='asis'}\n",
code, "\n```\n"), fileConn)
close(fileConn)
knitr::knit('output.Rmd')
但失败并显示错误。
Error in writeLines(cat("---\noutput: pdf_document\n---\n```{r tab, echo=FALSE,
results='asis'}\n", :
can only write character objects
我想可能有一个更简单的解决方案?
答案 0 :(得分:2)
没有rmarkdown
,这是一种可能。
library(xtable)
latex <- print.xtable(xtable(head(iris)), print.results = FALSE)
writeLines(
c(
"\\documentclass[12pt]{article}",
"\\begin{document}",
"\\thispagestyle{empty}",
latex,
"\\end{document}"
),
"table.tex"
)
tools::texi2pdf("table.tex", clean = TRUE)
或者,使用standalone
文档类:
latex <- print.xtable(xtable(head(iris)), print.results = FALSE,
floating = FALSE)
writeLines(
c(
"\\documentclass[12pt]{standalone}",
"\\usepackage{caption}",
"\\begin{document}",
"\\minipage{\\textwidth}",
latex,
"\\captionof{table}{My caption}",
"\\endminipage",
"\\end{document}"
),
"table.tex"
)
tools::texi2pdf("table.tex", clean = TRUE)
答案 1 :(得分:1)
一种解决方案是使用tableGrob
中的gridExtra
,将表格添加到网格图中,并使用ggsave
保存它
require(ggplot2)
require(gridExtra)
ds <- iris[1:10, ]
tg <- tableGrob(ds)
ggsave("test.pdf", tg)
这很简单,但是对于复杂的表格,它不如LaTeX解决方案方便。
答案 2 :(得分:0)
这里是使用huxtable
软件包的单线(免责声明:我是作者)
huxtable::quick_pdf(iris[1:10, ])
它将自动在查看器中打开PDF –您可以使用auto_open=FALSE
禁用它。
要进行漂亮的格式化,请创建一个huxtable对象:
library(huxtable)
ht <- as_hux(iris[1:10, ])
bold(ht)[1,] <- TRUE # or whatever else you feel like doing
quick_pdf(ht)