Простые ручные таблицы RMarkdown, которые хорошо смотрятся в HTML, PDF и DOCX
Как вручную и просто отформатировать таблицу в RMarkdown, которая будет хорошо выглядеть при преобразовании в HTML (с использованием пакетов knitr и markdown), PDF (с использованием pandoc и miktex) и docx (с использованием pandoc)?
Я хочу иметь возможность писать небольшие таблицы в RMarkdown, которые не являются результатом функций R, которые хорошо выглядят в трех форматах, которые я использую чаще всего. До сих пор я нашел формат, который выглядит хорошо в 2 из 3 форматов, возможно ли 3/3?
Один. Это выглядит хорошо после Knit HTML, но не хорошо в PDF или DOCX
<table>
<tr>
<td>Eggs</td>
<td>Ham</td>
</tr>
<tr>
<td>Basil</td>
<td>Tomato</td>
</tr>
</table>
Два. Это выглядит хорошо после Knit HTML, но не хорошо в PDF или DOCX
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
Три. Этот не выглядит хорошо после Knit HTML, но хорош в PDF и DOCX (лучший вариант до сих пор)
V1 Tweedledee Tweedledum
-------- -------------- ----------------
Age 14 14
Height 3'2" 3'2"
Politics Conservative Conservative
Religion "New Age" Syrian Orthodox
--------- -------------- ----------------
Четыре. Это хорошо выглядит после Knit HTML и создания PDF и docx (победитель!), Но я не форматирую вручную.
```{r table1, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'}
require(pander)
panderOptions('table.split.table', Inf)
set.caption("Data on cars")
pander(mtcars, style = 'rmarkdown')
```
Вот как я делаю PDF и DOCX файлы:
filen <- "table" # name of my RMarkdown file without suffix
knit(paste0(filen,".Rmd"))
# make PDF
system(paste0("pandoc -s ", paste0(filen,".md"), " -t latex -o ", paste0(filen,".pdf"), " --highlight-style=tango -S"))
# make docx
system(paste0("pandoc -s ", paste0(filen,".md"), " -o ", paste0(filen,".docx"), " --highlight-style=tango -S"))
2 ответа
Вдохновленный комментариями Дароцига, особенно подсказкой, что pander
переводит к синтаксису канала Пандока, я более внимательно посмотрел на pander
документация и найденная ссылка на cat
, После некоторых экспериментов я нашел победителя:
```{r table2, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'}
tabl <- " # simple table creation here
| Tables | Are | Cool |
|---------------|:-------------:|------:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
"
cat(tabl) # output the table in a format good for HTML/PDF/docx conversion
```
Это дает одинаково хорошо выглядящие таблицы в HTML, PDF и docx в моих тестах. Теперь я собираюсь поддержать Дарошцига по некоторым другим вопросам, чтобы поблагодарить его за то, что он помог мне найти решение.
Если вам нужен заголовок для вашего стола... тогда вам нужно сделать это немного по-другому. Обратите внимание, что заголовок будет виден только в PDF, а не в HTML:
```{r table-simple, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'}
require(pander)
panderOptions('table.split.table', Inf)
set.caption("My great data")
my.data <- " # replace the text below with your table data
Tables | Are | Cool
col 3 is | right-aligned | $1600
col 2 is | centered | $12
zebra stripes | are neat | $1"
df <- read.delim(textConnection(my.data),header=FALSE,sep="|",strip.white=TRUE,stringsAsFactors=FALSE)
names(df) <- unname(as.list(df[1,])) # put headers on
df <- df[-1,] # remove first row
row.names(df)<-NULL
pander(df, style = 'rmarkdown')
```
Сегодня есть много лучших ответов на этот вопрос, поскольку библиотеки таблиц R Markdown продолжают развиваться. Сравнения, проведенные всего несколько месяцев назад, часто бесполезны или вводят в заблуждение. Поэтому мне часто нужно прототипировать быстрое сравнение нескольких вариантов табличных макетов отчетов разной сложности.
Вот простой подход и набор инструментов для оценки альтернативных библиотек таблиц и форматов вывода с вашими собственными данными:
- Создайте файл TableTester.Rmd с приведенным ниже кодом. (Примечание: вы можете использовать свой собственный df, чтобы поэкспериментировать с форматированием пакета.)
- Сгенерируйте вывод html, pdf и docx с помощью скрипта TestRunner.R (код ниже)
Код уценки R — TableTester.Rmd
---
title: "Table-Evaluation"
output:
pdf_document:
latex_engine: xelatex
html_document:
theme: cosmo
word_document: default
---
```{r setup-data-test, include=FALSE}
library(reactable)
library(kableExtra)
library(flextable)
df <- tibble(
food = c("eggs", "ham", "squash", "rhubarb"),
color = c("green", "green", "yellow", "purple"),
class = c("imaginary", "imaginary", "real", "real")
)
```
```{r, test}
reactable(df)
kbl(df)
flextable(df)
```
Скрипт R — TestRunner.R
for (i in c("html_document", "pdf_document", "word_document")) {
rmarkdown::render(
input = "TableTester.Rmd",
output_format = i)
}