Mon workflow R + Quarto pour la recherche reproductible

La science reproductible n’est plus une option, c’est une exigence. Pourtant, beaucoup de chercheurs encore aujourd’hui jonglent entre des scripts dispersés, des fichiers Word avec capture d’écran, et des analyses qu’ils ne peuvent plus reproduire 6 mois plus tard. Voici le workflow que j’utilise au quotidien.

Les 5 piliers de mon workflow

  • RStudio Projects : chaque étude = un projet isolé avec son propre .Rproj.
  • Quarto : rapports, articles, slides, sites — tout en un format texte.
  • Git + GitHub : versionnage du code et collaboration.
  • renv : capture exacte des versions de packages.
  • Structure de dossiers standardisée : même organisation pour chaque projet.

1. La structure de projet

J’utilise toujours la même arborescence, ce qui me permet de retrouver mes repères instantanément :

mon-projet/
├── mon-projet.Rproj
├── README.md
├── _quarto.yml
├── renv.lock
├── .gitignore
│
├── data/
│   ├── raw/         # données brutes (jamais modifiées)
│   ├── processed/   # données nettoyées
│   └── metadata.md  # description des fichiers
│
├── R/
│   ├── 01-import.R
│   ├── 02-clean.R
│   ├── 03-eda.R
│   ├── 04-models.R
│   └── utils.R
│
├── reports/
│   ├── rapport-final.qmd
│   └── figures/
│
└── output/
    ├── figures/
    └── tables/

2. Configuration Quarto

Un fichier _quarto.yml à la racine configure le projet entier :

project:
  type: default
  output-dir: output

execute:
  echo: true
  warning: false
  message: false
  cache: true

format:
  html:
    theme: cosmo
    toc: true
    toc-depth: 3
    number-sections: true
    code-fold: false
    fig-width: 8
    fig-height: 5
  pdf:
    documentclass: article
    geometry: "margin=2cm"
    fig-width: 7

lang: fr

3. renv pour la reproductibilité des packages

Combien de fois avez-vous vu un script ne plus marcher parce qu’un package a été mis à jour ? renv règle ce problème :

library(renv)

# Initialiser renv dans un projet
renv::init()

# Après avoir installé des packages
renv::snapshot()  # Gèle l'état actuel dans renv.lock

# Sur un autre ordinateur (ou plus tard)
renv::restore()  # Restaure exactement les mêmes versions

4. Git pour le versionnage

Un bon .gitignore est essentiel pour ne pas alourdir le repo avec des données ou des sorties :

# RStudio
.Rproj.user/
.Rhistory
.RData
.Ruserdata

# renv
renv/library/
renv/local/
renv/cellar/
renv/lock/

# Données sensibles
data/raw/*.csv
data/raw/*.xlsx

# Outputs générés
output/
*_files/
*.html
*.pdf

5. Un exemple de rapport Quarto

---
title: "Analyse des données de pêche 2024"
author: "Sosthène"
date: today
format: html
---

## Introduction

Ce rapport analyse les données de prélèvements...

## Données

```{r}
library(tidyverse)
data <- read_csv("data/processed/peche_2024.csv")
skimr::skim(data)
```

## Analyse

```{r}
#| label: fig-tendance
#| fig-cap: "Tendance temporelle des captures"
data %>%
  ggplot(aes(x = annee, y = capture)) +
  geom_line() +
  theme_minimal()
```

La figure @fig-tendance montre une tendance décroissante...

Les avantages

  • Tout en un endroit : code, texte, figures, tableaux dans le même fichier .qmd.
  • Reproductible : relancer le projet 2 ans plus tard donne EXACTEMENT le même résultat.
  • Collaboratif : Git permet à plusieurs personnes de travailler sans écraser les fichiers des autres.
  • Multi-format : HTML, PDF, Word, slides — tout depuis le même source.
  • Versionné : vous pouvez revenir à n’importe quel état antérieur du projet.

À retenir

Adopter un workflow reproductible demande un investissement initial (apprendre Git, Quarto, renv), mais le retour est exponentiel : moins de temps perdu à retrouver « la bonne version du script », plus de confiance dans vos résultats, et une collaboration vraiment efficace. Commencez petit, soyez constant, et 6 mois plus tard vous ne pourrez plus travailler autrement.

Articles liés

Réponses

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