Простые ручные таблицы RMarkdown, которые хорошо смотрятся в HTML, PDF и DOCX
Как я могу вручную и просто форматировать таблицу в RMarkdown, которая будет хорошо выглядеть при преобразовании в HTML (с использованием пакетов knitr и markdown), PDF (с использованием pandoc и miktex) и docx (с использованием pandoc)?
Я хочу, чтобы писать небольшие таблицы в RMarkdown, которые не являются результатом функций R, которые хорошо смотрятся в трех форматах, которые я использую чаще всего. До сих пор я нашел формат, который хорошо выглядит в двух из трех форматов, возможно 3/3?
Один. Это выглядит хорошо после Knit HTML, но не очень хорошо в PDF или docx
<table>
<tr>
<td>Eggs</td>
<td>Ham</td>
</tr>
<tr>
<td>Basil</td>
<td>Tomato</td>
</tr>
</table>
Два. Этот выглядит хорошо после вязания 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
--------- -------------- ----------------
Четыре. Это выглядит хорошо после вязания 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"))
Ответы
Ответ 1
Вдохновленный комментариями daroczig, особенно ключ, который pander
переводит на синтаксис pandoc pipe, я более подробно рассмотрел документацию 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 в моих тестах. Теперь я ухожу, чтобы поддержать daroczig по некоторым другим вопросам, чтобы поблагодарить его за то, что он привлек меня к решению.
Если вам нужна подпись для вашей таблицы..., вам нужно будет сделать это несколько иначе. Обратите внимание, что подпись будет видна только в формате 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')
```