【发布时间】:2019-08-31 14:19:13
【问题描述】:
我有一个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
我想可能有更简单的解决方案?
【问题讨论】:
-
为什么要直接渲染呢? knitr 工作流程有什么问题?我之所以这样问,是因为您可能会更幸运地在当前工作流程中解决这些问题并自动化编织,而不是通过例如制作漂亮的表格。表 grobs。
-
这更像是一种绝望的行为。我对 knitr 工作流程没有任何问题,我只是想避免手动处理单独的
.Rmd文件。我知道print.xtable中有一个file选项,我们可以将表格保存为.tex文件。我也不知道自动化编织过程的方法。我可以假设您知道我想到的解决方案吗? -
确实,只需在整个文档(或部分)上使用
rmarkdown::render。这将生成一个 PDF,无需任何手动操作。关于您的特定代码,问题是writeLines(cat部分。目前尚不清楚您的思维过程是什么,但writeLines和cat本质上是执行相同(或相似)功能的替代方案。你会使用它们中的任何一个,而不是同时嵌套两者。您可能打算使用c而不是cat?