Obtenir des tableaux personnalisés dans les trois formats de sortie de quarto grâce à flextable

Astuce quarto : des tableaux personnalisés dans les 3 formats de sortie

Dans cet article, je vous présente une solution simple et efficace pour personnaliser l’apparence de vos tableaux sous Quarto, tout en garantissant un rendu cohérent dans les trois formats principaux : HTML, Word (docx) et PDF — le tout sans dupliquer vos chunks.

Une démonstration vidéo est disponible en bas de cette page, ou simplement en cliquant ici

Mon besoin : des tableaux lisibles et personnalisés, quel que soit le format

Dans le cadre de mes prestations en méthodologie clinique, j’évalue fréquemment la précision d’un paramètre, comme un taux d’échec, en étudiant la largeur de son intervalle de confiance à 95 % selon différentes conditions — par exemple, en fonction de la valeur cible de ce taux et du nombre de patients inclus.

Je réalise ces calculs avec R, dans des documents Quarto, ce qui me permet d’automatiser la génération des tableaux récapitulatifs. J’y mets en évidence les combinaisons de conditions qui conduisent à une largeur d’intervalle inférieure ou égale à un seuil donné (10 % par exemple), en jouant sur la couleur de fond ou de police, ou encore en appliquant du gras ou de l’italique.

Je génère généralement une version HTML pour mon propre usage, et des versions Word ou PDF pour mes clients, afin qu’ils puissent annoter les résultats si besoin. J’ai donc besoin que la mise en forme soit définie une seule fois dans le code, et qu’elle soit fidèlement conservée dans tous les formats de sortie.

Cela paraît simple, mais en pratique, ce n’est pas toujours si évident. Dans cet article, je vous montre comment je procède.

Ma solution avec le package flextable

La méthode que j’emploie se déroule en trois étapes :

  1. Créer le tableau avec les données utiles
  2. Le personnaliser avec le package flextable grâce aux fonctions bg()italic()color()bold(), etc.
  3. Générer le document dans les formats souhaités (HTML, Word, PDF):

Etape 1 : Création du tableau

Dans l’exemple ci-dessous, je calcule l’intervalle de confiance à 95% d’un taux d’échec, en le faisant varier de 10% à 30%, et en faisant varier le nombre de sujets inclus entre 100 et 300.

Tx_echec_cible <- seq(0.1, 0.3, by=0.1)
Nb_sujets <- seq(100, 300, by=50)
tab <- expand_grid(Tx_echec_cible , Nb_sujets) %>%
  rowwise() %>% 
  mutate(
    borne_basse=binom.confint(Nb_sujets*Tx_echec_cible,Nb_sujets,method="wilson", conf.level = 0.95)$lower,
    borne_haute=binom.confint(Nb_sujets*Tx_echec_cible,Nb_sujets,method="wilson", conf.level = 0.95)$upper,
    largeur = borne_haute-borne_basse,
  ) %>% 
    mutate(across(everything(), ~ round(., 2))) 

Voici le tableau brut : 

tab

# A tibble: 15 × 5
# Rowwise: 
   Tx_echec_cible Nb_sujets borne_basse borne_haute largeur
            <dbl>     <dbl>       <dbl>       <dbl>   <dbl>
 1            0.1       100        0.06        0.17    0.12
 2            0.1       150        0.06        0.16    0.1 
 3            0.1       200        0.07        0.15    0.08
 4            0.1       250        0.07        0.14    0.07
 5            0.1       300        0.07        0.14    0.07
 6            0.2       100        0.13        0.29    0.16
 7            0.2       150        0.14        0.27    0.13
 8            0.2       200        0.15        0.26    0.11
 9            0.2       250        0.16        0.25    0.1 
10            0.2       300        0.16        0.25    0.09
11            0.3       100        0.22        0.4     0.18
12            0.3       150        0.23        0.38    0.15
13            0.3       200        0.24        0.37    0.13
14            0.3       250        0.25        0.36    0.11
15            0.3       300        0.25        0.35    0.1  

Etape 2 : Personnalisation avec flextable

Je souhaite ici mettre en évidence les lignes où la largeur de l’intervalle de confiance est inférieure ou égale à 10 %, en modifiant la couleur de fond et le style du texte dans la colonne largeur.

tab %>%
  flextable() %>%
  bg(i = ~ largeur <= 0.1, bg = "lightblue") %>% 
  color(i = ~ largeur <= 0.1, j = "largeur", color = "red") %>% 
  bold(i = ~ largeur <= 0.1, j = "largeur") %>%
  italic(i = ~ largeur <= 0.1, j = "largeur") %>%
  autofit() # permet d'adapter la largeur des colonnes au contenu 

Voici le rendu html :

Apparence du tableau personnalisé avec flextable, dans le document html

Etape 3 : Générer les tableaux personnalisés dans les 3 formats

Pour pouvoir générer les trois formats principaux de document (html, docx et pdf), vous devez inclure les formats souhaités dans l’en-tête YAML de votre document Quarto. Ensuite, il suffit d’utiliser le menu Render pour générer chaque version du document.

Réglage des formats de sorties des documents rédigés avec quarto

Voici l’apparence du tableau généré avec Quarto et flextable, dans les formats html (en haut à gauche), word(en haut à droite) et pdf (en bas)

Apparence du tableau personnalisé avec flextable, dans le document html
Apparence du tableau personnalisé avec flextable, dans le document docx
Apparence du tableau personnalisé avec flextable, dans le document pdf

Remarque au sujet des légendes et renvois des tableaux flextable

Le package flextable s’intègre parfaitement à Quarto, ce qui facilite l’ajout de légendes et de renvois automatiques à vos tableaux. Il vous suffit d’ajouter dans votre chunk les options tbl-cap et label, comme ceci :

```{r}
#| tbl-cap: "Caclul de la précision du taux d'échec, en fonction du nombre de sujets inclus, et du taux d'échec cible"
#| label: tbl-precision

tab %>%
  flextable() %>%
  bg(i = ~ largeur <= 0.1, bg = "lightblue") %>% 
  color(i = ~ largeur <= 0.1, j = "largeur", color = "red") %>% 
  bold(i = ~ largeur <= 0.1, j = "largeur") %>%
  italic(i = ~ largeur <= 0.1, j = "largeur") %>%
  autofit() 
```
 

Démonstration vidéo

Pour aller plus loin

Conclusion

J’espère que cet article vous aidera à produire des tableaux plus élégants, plus lisibles et surtout compatibles avec tous vos formats de sortie dans Quarto.

Et vous, quels sont les problèmes que vous rencontrez avec Quarto ? N’hésitez pas à les partager en commentaire (en bas de la page) : je me ferai un plaisir de vous aider si je le peux — et peut-être que d’autres lecteurs de la communauté auront aussi des suggestions à vous proposer !

Poursuivez votre lecture

📩 Envie de recevoir plus d’astuces et de tutoriels sur R ?

Abonnez-vous gratuitement à la lettre de diffusion du blog pour ne rien manquer !

Vous serez directement informés de la publication de mes nouveaux articles, de la mise à disposition de ressources exclusives, et des actualités sur mes formations.

Vous recevrez également un cadeau 🎁 de bienvenu : des fiches « aide mémoire » (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R 

🎓 Vous souhaitez vous former au logiciel R ou aux analyses statistiques ?

Vous souhaitez soutenir mon travail ?

Vous pouvez soutenir mon travail en faisant un don libre sur le Tipeee du blog

3 réponses

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Fonctions statistiques R

Aide mémoire off'R ;)

Enregistrez vous pour recevoir gratuitement mes fiches « aide mémoire » (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.