web-dev-qa-db-fra.com

Tableaux RMarkdown manuels simples qui semblent bons en HTML, PDF et DOCX

Comment puis-je formater manuellement et simplement un tableau dans RMarkdown qui aura l'air bien une fois converti en HTML (en utilisant les packages knitr et markdown), PDF (en utilisant pandoc et miktex) et docx (en utilisant pandoc) ?

Je veux pouvoir écrire de petites tables dans RMarkdown qui ne sont pas le résultat de fonctions R qui semblent bonnes dans les trois formats que j'utilise le plus souvent. Jusqu'à présent, j'ai trouvé un format qui semble bon dans 2 des 3 formats, 3/3 est-il possible?

Une. Cela semble bon après Knit HTML mais pas bon dans le PDF ou docx

<table>
<tr>
<td>Eggs</td>
<td>Ham</td>
</tr>
<tr>
<td>Basil</td>
<td>Tomato</td>
</tr>
</table>

Deux. Celui-ci semble bon après Knit HTML mais pas bon dans le PDF ou docx

| Tables        | Are           | Cool  |
| ------------- |:-------------:| -----:|
| col 3 is      | right-aligned | $1600 |
| col 2 is      | centered      |   $12 |
| zebra stripes | are neat      |    $1 |

Trois. Celui-ci ne semble pas bon après Knit HTML mais est bon dans le PDF et docx (meilleure option jusqu'à présent)

V1         Tweedledee       Tweedledum
--------   --------------   ----------------
Age        14               14
Height     3'2"             3'2"
Politics   Conservative     Conservative
Religion   "New Age"        Syrian Orthodox
---------  --------------   ----------------

Quatre. Cela semble bon après Knit HTML et make PDF et docx (gagnant!)) Mais ce n'est pas le formatage manuel que je recherche.

```{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')
```

Voici comment je crée les fichiers PDF et 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"))
37
Ben

Inspiré par les commentaires de daroczig, en particulier l'indice que pander traduit dans la syntaxe de pipe de pandoc, j'ai examiné de plus près la documentation de pander et j'ai trouvé une référence à cat. Après quelques expérimentations, j'ai trouvé le gagnant:

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

Cela produit des tableaux uniformément beaux en HTML, PDF et docx dans mes tests. Maintenant, je vais voter pour daroczig sur d'autres questions pour le remercier de m'avoir apporté la solution.

Si vous avez besoin d'une légende pour votre table ... alors vous devrez le faire un peu différemment. Notez que la légende ne sera visible que dans le PDF, pas dans le 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')
```
33
Ben