Afficher le code R
file.exists("data/raw/enqueter_brut.csv")
file.exists("data/documentation/questionnaire_enqueter.pdf")
file.exists("data/documentation/dictionnaire_variables.xlsx")Si vous rouvrez votre analyse dans six mois — ou si vous l’envoyez à un collègue — pourra-t-elle être exécutée sans modifier manuellement les chemins, rechercher les fichiers ou deviner l’ordre des scripts ?
À la fin de ce chapitre, vous saurez :
{renv} dans la reproductibilité ;Il faut savoir créer un objet, exécuter un script, charger un package et reconnaître un data.frame ou un tibble.
Une analyse statistique n’est pas seulement un ensemble de résultats. C’est une chaîne de transformations : un fichier est importé, contrôlé, nettoyé, recodé, analysé, puis transformé en tableaux et figures. Si cette chaîne n’est pas organisée, plusieurs problèmes apparaissent rapidement :
final, final2, final_vrai ;Ces difficultés ne sont pas de simples questions de rangement. Elles concernent directement la traçabilité et la possibilité de vérifier les résultats.
Un projet reproductible doit permettre de répondre à trois questions : d’où vient ce résultat ? quel code l’a produit ? à partir de quelle version des données ?
RStudio permet de regrouper une analyse dans un projet. Lorsqu’un projet est ouvert, son dossier constitue un point de référence stable pour les fichiers (Posit Software, PBC 2026b).
Pour un projet nommé analyse_enquete, une structure minimale peut être :
analyse_enquete/
├── analyse_enquete.Rproj
├── README.md
├── data/
│ ├── raw/
│ └── derived/
├── R/
├── figures/
├── outputs/
└── rapport.qmd
Cette structure n’est pas une loi universelle. L’important est de choisir une organisation compréhensible et stable.
data/raw/ contient les données telles qu’elles ont été reçues ou téléchargées. Elles ne sont pas modifiées manuellement.
data/derived/ contient les données produites par le code : version nettoyée, fichier analytique, agrégats intermédiaires.
R/ contient les scripts de traitement ou des fonctions réutilisables.
figures/ et outputs/ contiennent des sorties produites automatiquement : images, tableaux exportés, résultats de modèles, etc.
README.md explique le projet : objectif, provenance des données, structure, ordre d’exécution, éventuelles contraintes d’accès.
Corriger une cellule directement dans enquete_brut.xlsx détruit la trace de la correction. Il vaut mieux conserver le fichier source intact et écrire dans un script la règle qui produit enquete_clean.rds.
EnquêteR utilisé dans ce livreLe jeu pédagogique fourni avec ce manuel suit précisément cette logique :
data/
├── raw/
│ ├── enqueter_brut.csv
│ ├── enqueter_brut.xlsx
│ ├── enqueter_brut.dta
│ └── enqueter_vague2.csv
├── documentation/
│ ├── questionnaire_enqueter.pdf
│ ├── dictionnaire_variables.xlsx
│ ├── dictionnaire_variables.csv
│ ├── modalites.csv
│ └── anomalies_pedagogiques.csv
└── derived/
└── enqueter_clean.csv
Le fichier brut contient volontairement des codes spéciaux, des valeurs impossibles et quelques incohérences. L’objectif n’est pas d’offrir une base immédiatement parfaite, mais de permettre au lecteur de construire pas à pas une version analytique documentée.
Considérons le chemin suivant :
readr::read_csv("C:/Users/Marie/Documents/Memoire/data/enquete.csv")Il peut fonctionner sur l’ordinateur de Marie, mais probablement pas sur celui de son directeur de mémoire. Le chemin incorpore une information propre à une machine.
Dans un projet, nous préférons :
readr::read_csv("data/raw/enquete.csv")Ce chemin est relatif à la racine du projet. Il décrit la position logique du fichier à l’intérieur de l’analyse.
setwd() comme stratégie d’organisationsetwd() change le répertoire de travail :
setwd("C:/Users/Marie/Documents/Memoire")Cette commande peut donner l’impression de résoudre le problème, mais elle réintroduit un chemin propre à une machine. Dans un workflow reproductible, nous privilégions un projet bien défini et des chemins relatifs.
{here}Pour rendre explicite la construction de chemins depuis la racine du projet, {here} fournit here() :
here::here("data", "raw", "enqueter_brut.csv")L’intérêt n’est pas de remplacer chaque chaîne de caractères par here(), mais de rendre la racine du projet explicite lorsque cela améliore la robustesse du code.
Un chemin doit décrire l’organisation du projet, pas l’identité ou le disque dur de la personne qui exécute le code.
Pour une analyse d’enquête standard, on peut adopter :
R/
├── 00-setup.R
├── 01-import.R
├── 02-diagnostic.R
├── 03-nettoyage.R
├── 04-recodages.R
├── 05-descriptifs.R
└── 06-modeles.R
Les numéros indiquent l’ordre logique. Cette convention devient particulièrement utile lorsque plusieurs personnes travaillent sur le même projet.
00-setup.R : configuration minimaleUn fichier de configuration peut charger les packages réellement nécessaires :
library(dplyr)
library(tidyr)
library(readr)
library(haven)
library(labelled)Éviter d’y mettre des centaines de lignes de transformation. Le fichier de configuration doit rester lisible.
Un bon découpage limite les dépendances implicites :
01-import.R lit les sources et vérifie leur structure ;02-diagnostic.R produit un audit ;03-nettoyage.R transforme les anomalies documentées ;04-recodages.R construit les variables d’analyse ;Cette séparation est préférable à un fichier unique de 3 000 lignes où importation, nettoyage, graphiques et modèles sont entremêlés.
Les suffixes comme _final2 sont souvent le symptôme d’un workflow manuel. Une convention plus informative est :
enqueter_brut.csv
enqueter_clean.rds
enqueter_analyse.rds
et, si une date est réellement nécessaire :
2026-08-14_enqueter_export.csv
La date doit avoir une fonction : version externe reçue, extraction quotidienne, livraison officielle. Elle ne remplace pas un système de versionnage.
Si enqueter_clean.rds est toujours généré par 03-nettoyage.R, il n’est pas nécessaire d’enregistrer manuellement une nouvelle copie à chaque modification du script. Le code est la recette ; le fichier dérivé est un produit régénérable.
Une analyse peut fonctionner par accident parce que l’environnement contient des objets créés auparavant. Pour détecter cette dépendance, il est utile de redémarrer régulièrement R puis de réexécuter le projet.
Dans RStudio, une session propre permet de vérifier que le code crée réellement tout ce dont il a besoin.
Éviter de s’appuyer sur la restauration automatique d’un ancien espace de travail .RData. L’objectif est que les objets soient recréés par les scripts.
Si un script ne fonctionne qu’après avoir exécuté manuellement plusieurs commandes non enregistrées, l’analyse n’est pas encore reproductible.
Un document Quarto .qmd associe texte en Markdown, métadonnées YAML et blocs de code exécutables. Un projet Quarto peut partager une configuration dans _quarto.yml et rendre un ensemble de documents avec une même structure (Posit Software, PBC 2026a).
Un document minimal :
---
title: "Analyse descriptive"
---
## Âge des répondants
::: {.cell layout-align="center"}
```{.r .cell-code}
mean(enquete$age, na.rm = TRUE)
```
:::L’intérêt méthodologique est important : la valeur affichée dans le rapport peut être générée directement par le code qui la calcule. Cela limite les erreurs de copier-coller entre R, Excel, Word et une présentation.
Il faut distinguer :
.qmd, à conserver et versionner ;Dans ce livre, Quarto sert à la fois au cours et d’exemple de workflow reproductible.
Git conserve l’historique des modifications de fichiers texte. Il permet notamment :
Un commit utile peut être :
Recoder les valeurs 98/99 du revenu en valeurs manquantes
plutôt que :
modifs
Git ne remplace pas les sauvegardes et ne doit pas conduire à publier des données confidentielles. Dans de nombreux projets d’enquête, le code peut être versionné alors que les données brutes restent sur un espace sécurisé.
.gitignoreUn fichier .gitignore indique les fichiers à ne pas versionner. Par exemple :
.Rhistory
.RData
_book/
.quarto/
data/raw/confidentiel/
Ce mécanisme est utile, mais il ne constitue pas à lui seul une politique de sécurité. Une donnée sensible ne doit pas être placée sur un service distant simplement parce que l’on pense l’avoir ignorée.
{renv} : enregistrer les dépendances du projetUn script dépend non seulement de R mais aussi des versions des packages. {renv} crée un environnement de packages associé au projet et un fichier renv.lock qui décrit les versions nécessaires (Ushey et Wickham 2026).
Les trois commandes à retenir sont :
renv::init()
renv::snapshot()
renv::restore()init() initialise l’environnement du projet ;snapshot() enregistre l’état des dépendances dans le lockfile ;restore() réinstalle les versions décrites par ce lockfile.Le but n’est pas de demander à un étudiant débutant de maîtriser immédiatement la gestion complète des dépendances. Il suffit de comprendre qu’une analyse reproductible dépend aussi de son environnement logiciel.
Un lockfile augmente fortement la capacité à recréer un environnement, mais la reproductibilité dépend également du système d’exploitation, des sources de données, des logiciels externes et parfois de services en ligne. Il faut documenter ce qui compte pour l’analyse.
README.mdUn bon README répond rapidement aux questions suivantes :
Exemple :
# Analyse de l'enquête X
## Données
Les fichiers sources sont conservés dans `data/raw/` et ne sont jamais modifiés.
## Reproduire l'analyse
1. Ouvrir `analyse_enquete.Rproj`.
2. Restaurer l'environnement avec `renv::restore()` si nécessaire.
3. Exécuter les scripts `R/01-...` à `R/04-...`.
4. Rendre `rapport.qmd`.Ce texte paraît trivial au moment de créer le projet. Quelques mois plus tard, il peut économiser beaucoup de temps.
Les enquêtes peuvent contenir des variables identifiantes ou quasi-identifiantes. L’organisation d’un projet doit alors distinguer au minimum :
L’absence du nom ou de l’adresse ne garantit pas l’anonymat. Une combinaison rare d’âge, commune, profession et caractéristiques familiales peut permettre une réidentification. Le chapitre 24 approfondira cette question.
Dans RStudio, ouvrez le fichier .Rproj du projet. Ensuite :
getwd()Le chemin affiché peut être différent d’une machine à l’autre. C’est normal. Ce qui doit rester identique est l’arborescence à l’intérieur du projet.
file.exists("data/raw/enqueter_brut.csv")
file.exists("data/documentation/questionnaire_enqueter.pdf")
file.exists("data/documentation/dictionnaire_variables.xlsx")Chaque instruction doit renvoyer TRUE si le kit est correctement copié.
here::here("data", "raw", "enqueter_brut.csv")raw/Les chapitres suivants créeront les versions dérivées par le code. Le dossier raw/ devient ainsi la référence de départ.
Parmi les chemins suivants, lesquels sont portables ?
C:/Users/Lina/Desktop/memoire/data/enquete.csv
data/raw/enquete.csv
D:/CoursM2/2026/enquete.csv
figures/age.png
data/raw/enquete.csv et figures/age.png sont des chemins relatifs adaptés à une arborescence de projet. Les deux autres contiennent un lecteur ou un dossier propre à une machine.
Où placeriez-vous :
Une solution cohérente serait : SPSS dans data/raw/, RDS dans data/derived/, PNG dans figures/, dictionnaire dans data/documentation/. Le choix exact peut varier ; l’essentiel est de distinguer source, dérivé, documentation et sortie.
Créez un nouveau projet RStudio appelé exercice_enquete et les dossiers suivants :
data/raw
data/derived
data/documentation
R
figures
outputs
Ajoutez un README.md de dix lignes maximum expliquant le rôle de chaque dossier.
Un collègue vous envoie un projet contenant :
analyse_finale.R ;enquete_corrigee_finale2.xlsx ;graph1.png ;setwd("C:/Users/Paul/...").Proposez une stratégie de réorganisation en justifiant ce qui doit être conservé comme source, régénéré, renommé ou supprimé.
Concevez l’arborescence d’un projet d’enquête qui contient des données confidentielles non publiables, un code destiné à être ouvert et un article Quarto. Indiquez :
Une réponse attendue distingue d’abord le fichier source reçu d’un fichier modifié manuellement. Le fichier brut original doit être retrouvé si possible et placé dans data/raw/. Les corrections doivent ensuite être écrites dans un script, qui produit un fichier dans data/derived/. Les setwd() absolus sont retirés au profit de chemins relatifs. Le graphique est idéalement régénéré par le code et placé dans figures/. Enfin, l’unique script peut être conservé s’il reste lisible ou scindé par responsabilités si sa taille et ses dépendances le justifient.
Une architecture robuste peut versionner scripts, .qmd, README, métadonnées non sensibles et renv.lock, tout en excluant data/raw/ et tout dérivé contenant des microdonnées confidentielles. La reproduction complète nécessite alors un canal autorisé pour obtenir les données, plus des instructions permettant de les placer au bon endroit. L’ouverture du code n’implique pas l’ouverture des microdonnées.
setwd() avec un chemin personnel n’est pas une stratégie de reproductibilité.{renv} aide à conserver l’histoire de l’environnement logiciel (Ushey et Wickham 2026).Les principes de projets Quarto et de métadonnées partagées sont documentés officiellement par Quarto (Posit Software, PBC 2026a). La documentation de {renv} présente le lockfile, snapshot() et restore() (Ushey et Wickham 2026). Les conventions de style ne sont pas obligatoires, mais une convention stable améliore nettement la lisibilité du code (Tidyverse Team 2026).
Dans le chapitre suivant, nous allons enfin ouvrir les fichiers d’enquête. L’objectif ne sera pas seulement de « réussir l’import », mais de vérifier immédiatement ce que R a réellement lu.