Простые ручные таблицы 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 продолжают развиваться. Сравнения, проведенные всего несколько месяцев назад, часто бесполезны или вводят в заблуждение. Поэтому мне часто нужно прототипировать быстрое сравнение нескольких вариантов табличных макетов отчетов разной сложности.

Вот простой подход и набор инструментов для оценки альтернативных библиотек таблиц и форматов вывода с вашими собственными данными:

  1. Создайте файл TableTester.Rmd с приведенным ниже кодом. (Примечание: вы можете использовать свой собственный df, чтобы поэкспериментировать с форматированием пакета.)
  2. Сгенерируйте вывод 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)
}
Другие вопросы по тегам