Как экспортировать xtable в PDF напрямую через R скрипт? - PullRequest
1 голос
/ 10 апреля 2019

У меня есть data.frame, который мне нужен как хороший PDF-стол для научного плаката.В то время как очень легко экспортировать графики через pdf(), я застрял с этой таблицей.

Я знаю, как получить таблицу PDF с rmarkdown, например,

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

Полагаю, есть более простое решение?

Ответы [ 3 ]

2 голосов
/ 10 апреля 2019

Здесь есть возможность без 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 голос
/ 10 апреля 2019

Одним из решений будет использование tableGrob из gridExtra, добавление таблицы к графику сетки и сохранение ее с помощью ggsave

require(ggplot2)
require(gridExtra)

ds <- iris[1:10, ]
tg <- tableGrob(ds)
ggsave("test.pdf", tg)

Это довольно просто, но будет менее удобно, чемрешение LaTeX для более сложных таблиц.

0 голосов
/ 22 апреля 2019

Это однострочник, использующий пакет 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)
...