pwquint24/org-babel-r

Guide complet pour la science des données, le calcul statistique, les périphériques graphiques, l'intégration ESS et la recherche reproductible utilisant R avec Org Babel.

Qu'est-ce que org-babel-r ?

Ce skill fournit aux développeurs et aux data scientists un guide exhaustif pour exécuter du code R dans Org Babel (Emacs). Il couvre la configuration de l'environnement (avec ESS et ob-R), les modes d'exécution (session interactive ou non), la gestion des résultats (tableaux, sorties console, graphiques), et les astuces avancées pour ggplot2, lattice, et les exports LaTeX avec xtable/ascii. Le skill explique en détail comment éviter les pièges courants, comme les graphiques vides avec ggplot2 en mode non-session, le réglage des paramètres de périphérique (DPI, format, résolution) et l'intégration avec ESS pour le débogage pas à pas. Il est conçu pour les utilisateurs d'Emacs qui souhaitent produire des documents de recherche reproductibles, des rapports statistiques ou des visualisations de qualité publication directement depuis leurs fichiers Org, avec des exemples concrets et des solutions de dépannage.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/pwquint24/org-babel-agent-skills/tree/HEAD/skills/org-babel-r

Installed? Explore more Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Blocs de code source R dans Org Babel

L'utilisation de R avec Org Babel fournit un environnement pour le calcul statistique, l'analyse de données, la génération de graphiques et la recherche reproductible. Les blocs de code R dans Org Mode s'intègrent avec ESS (Emacs Speaks Statistics) pour prendre en charge l'exécution interactive, le partage d'état entre blocs, les graphiques de qualité publication et les exports de tableaux structurés.


1. Configuration de l'environnement

1.1 Prérequis

  1. Une installation fonctionnelle de R (binaire CRAN ou compilé depuis les sources).
  2. ESS (Emacs Speaks Statistics) installé via MELPA (nécessaire pour l'évaluation en session et le pas à pas).
  3. ob-R activé dans org-babel-load-languages.

1.2 Modèle de configuration Emacs

Ajoutez ce qui suit à votre init.el :

;; 1. Configurer MELPA
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

;; 2. S'assurer que ESS est chargé
(unless (package-installed-p 'ess)
  (package-refresh-contents)
  (package-install 'ess))
(require 'ess-r-mode)

;; 3. Activer R dans Org Babel
(org-babel-do-load-languages
 'org-babel-load-languages
 '((emacs-lisp . t)
   (R          . t)))

;; 4. Optionnel : exécuter les blocs sans confirmation de sécurité interactive
(setq org-confirm-babel-evaluate nil)

1.3 Configuration spécifique à Windows

Sous Microsoft Windows, si Emacs signale The system cannot find the path specified, définissez explicitement le chemin du binaire R (y compris les indicateurs Babel par défaut --slave --no-save) :

;; Pour Windows 64 bits :
(setq org-babel-R-command "C:/Progra~1/R/R-4.3.0/bin/x64/R --slave --no-save")

Remarque : Lorsque vous utilisez :session, org-babel-R-command est ignoré et inferior-ess-R-program d'ESS est utilisé à la place.


2. Modes d'exécution : Sessions et intégration ESS

2.1 Non-session (:session none, par défaut)

S'exécute dans un processus R batch séparé (R --slave --no-save). Propre, isolé et sans effet de bord, mais réexécute toutes les bibliothèques et les chargements de données à chaque fois.

2.2 Sessions interactives (:session <nom>)

S'exécute dans un processus R inférieur ESS (*<nom>*).

  • Les jeux de données, bibliothèques, modèles et variables persistent à travers plusieurs blocs partageant le même nom de session.
  • Permet l'inspection interactive, le débogage et les flux de travail itératifs rapides.
#+PROPERTY: header-args:R :session *r-analysis* :results value :exports both

2.3 Débogage interactif et pas à pas avec ESS

Lors du débogage de blocs R :

  1. Basculer vers la session : Placez le point dans un bloc R, appuyez sur M-<down> (org-babel-pop-to-session) ou C-c C-z (ess-switch-to-end-of-ESS) pour accéder au tampon REPL R.
  2. Inspecter l'environnement : Utilisez ls(), str(x), dim(x), summary(x) ou head(x).
  3. Pas à pas ligne par ligne :
    • Appuyez sur C-c ' (org-edit-special) à l'intérieur du bloc Org pour entrer dans le tampon ESS R dédié.
    • Utilisez C-c C-n (ess-eval-line-and-step) ou C-c C-c (ess-eval-region-or-function-or-paragraph) pour parcourir le code ligne par ligne dans le processus R actif.
    • Appuyez sur C-c ' pour revenir au document Org.

3. Gestion des résultats : Data Frames, valeurs et tableaux

3.1 Renvoyer des données tabulaires (:results value table)

Lors du renvoi de data frames, matrices ou vecteurs, Org Babel les convertit directement en tableaux Org natifs :

#+NAME: mtcars_summary
#+BEGIN_SRC R :session *r* :results value table :colnames yes
  aggregate(mpg ~ cyl + gear, data=mtcars, FUN=mean)
#+END_SRC

#+RESULTS: mtcars_summary
| cyl | gear |              mpg |
|-----+------+------------------|
|   4 |    3 |            21.5  |
|   6 |    3 | 19.7500000000000 |
|   8 |    3 | 15.0500000000000 |
|   4 |    4 |            26.92 |
|   6 |    4 |            19.75 |
|   4 |    5 |             28.2 |
|   6 |    5 |             19.7 |
|   8 |    5 |            15.4  |
  • Ajoutez toujours :colnames yes lorsque vous travaillez avec des data frames pour préserver et afficher correctement les noms de colonnes.
  • Dans R, la valeur de la dernière expression évaluée est automatiquement renvoyée (pas de return() explicite requis).

3.2 Capturer la sortie console imprimée (:results output)

Utilisez :results output pour capturer la sortie standard, les impressions de modèles ou les statistiques récapitulatives :

#+BEGIN_SRC R :session *r* :results output
  fit <- lm(mpg ~ wt + hp, data=mtcars)
  summary(fit)$coefficients
#+END_SRC

#+RESULTS:
:               Estimate Std. Error   t value     Pr(>|t|)
: (Intercept) 37.2272694 1.59878754 23.284688 2.565459e-20
: wt          -3.8778307 0.63273349 -6.128695 1.119647e-06
: hp          -0.0317729 0.00902971 -3.518708 1.451229e-03

4. Graphiques et visualisations

4.1 Règle des graphiques de base (Org $\ge$ 9.3)

Pour produire des graphiques, spécifiez à la fois file et graphics dans :results, ainsi que le nom du fichier de sortie dans :file :

:results graphics file :file <chemin.ext>

Extensions de fichier prises en charge et périphériques R correspondants :

  • Vectoriel : .pdf, .svg, .ps / .postscript, .tex (TikZ)
  • Raster : .png, .jpg / .jpeg, .tiff, .bmp
  • Repli par défaut : .png
#+BEGIN_SRC R :file figures/base_plot.png :results graphics file :width 600 :height 400 :res 120
  plot(mtcars$wt, mtcars$mpg, pch=19, col="darkblue",
       xlab="Poids (1000 lb)", ylab="Miles par gallon",
       main="Consommation de carburant")
  abline(lm(mpg ~ wt, data=mtcars), col="red", lwd=2)
#+END_SRC

#+RESULTS:
[[file:figures/base_plot.png]]

4.2 La règle critique pour ggplot2 / Lattice ("Graphiques Grid")

Piège : Les fonctions Lattice (xyplot) et ggplot2 renvoient des objets graphiques objets. En évaluation batch non interactive (non-session), renvoyer l'objet sans l'imprimer crée un fichier graphique vide ou corrompu !

Il existe trois méthodes fiables pour rendre les graphiques ggplot2 / Lattice dans Org Babel :

Méthode A : print() explicite (Recommandé pour non-session)

#+BEGIN_SRC R :file figures/dist.png :results graphics file
  library(ggplot2)
  p <- ggplot(mtcars, aes(x=mpg)) + geom_histogram(bins=10, fill="steelblue")
  print(p)  # print() explicite déclenche le rendu du périphérique graphique
#+END_SRC

Méthode B : Utilisez :session (Impression automatique interactive)

#+BEGIN_SRC R :session *r* :file figures/dist.png :results graphics file
  library(ggplot2)
  ggplot(mtcars, aes(x=mpg)) + geom_histogram(bins=10, fill="steelblue")
#+END_SRC

Méthode C : Utilisez :results output graphics file

#+BEGIN_SRC R :file figures/dist.png :results output graphics file
  library(lattice)
  xyplot(mpg ~ wt, data=mtcars)
#+END_SRC

5. Arguments d'en-tête des périphériques graphiques R

Org Babel fournit des arguments d'en-tête de première classe mappés directement aux paramètres des périphériques graphiques R (png(), pdf(), svg(), etc.) :

Argument d'en-têteDéfautDescription et valeurs autorisées
:width7 (po) / 480 (px)Largeur du périphérique.
:height7 (po) / 480 (px)Hauteur du périphérique.
:unitspx (raster), in (PDF)Unités : "px", "in", "cm", "mm".
:res72Résolution nominale en pixels par pouce (DPI). (Essentiel pour des tracés raster nets : utilisez 150-300).
:bg"white"Couleur d'arrière-plan (par ex. "transparent", "#f7f7f7").
:fg"black"Couleur de premier plan.
:pointsize12Taille de base des points pour le rendu du texte.
:family"Helvetica"Famille de police ("Helvetica", "Times", "Palatino", "Courier", "sans", "serif", "mono").
:quality75Pourcentage de qualité JPEG (1-100).
:typeDéfaut de la plateformeMoteur de rendu bitmap : "cairo", "quartz" ou "Xlib".
:paper"special"Taille de papier PDF : "special", "a4", "letter", "a4r", etc.
:R-dev-argsnilChaîne brute d'arguments supplémentaires du périphérique R passés directement à la fonction du périphérique.

Exemple : SVG/PNG Cairo haute DPI avec dimensions personnalisées

#+NAME: custom_styled_plot
#+HEADER: :width 8 :height 5 :units in :res 300 :type cairo
#+HEADER: :R-dev-args bg="#fcfcfc"
#+BEGIN_SRC R :session *r* :file figures/styled_plot.png :results graphics file
  library(ggplot2)
  ggplot(diamonds[1:1000, ], aes(x=carat, y=price, color=cut)) +
    geom_point(alpha=0.6) +
    theme_minimal(base_family="sans") +
    labs(title="Prix des diamants par carat et taille")
#+END_SRC

5.3 Graphiques TikZ LaTeX pour faire correspondre les polices du document

Pour générer des tracés où les étiquettes des axes et les annotations mathématiques partagent exactement la même police LaTeX que votre document :

#+BEGIN_SRC R :file figures/model_plot.tex :results graphics file
  plot(1:10, type="b", main="\\textbf{Tracé TikZ avec des maths : } $\\int_0^1 x^2 dx$")
#+END_SRC

Lors de l'exportation vers LaTeX/PDF, le fichier .tex est inclus nativement via \input{figures/model_plot.tex} !


6. Sorties formatées avancées (ASCII, Org et LaTeX)

6.1 Sortie Org formatée avec le package ascii

Le package R ascii peut contraindre des objets R complexes non tabulaires (comme describe(), table() ou summary()) en syntaxe Org native :

#+BEGIN_SRC R :session *r* :results output org
  library(ascii)
  options(asciiType = "org")
  tab <- table(mtcars$cyl, mtcars$gear)
  ascii(tab, caption="Cylindres vs Vitesses avant")
#+END_SRC

#+RESULTS:
#+BEGIN_ORG
#+CAPTION: Cylindres vs Vitesses avant
|   | 3  | 4 | 5 |
|---+----+---+---|
| 4 | 1  | 8 | 2 |
| 6 | 2  | 4 | 1 |
| 8 | 12 | 0 | 2 |
#+END_ORG

6.2 Tableaux de publication avec xtable pour l'export LaTeX

Pour les documents destinés au PDF via l'export LaTeX, utilisez xtable avec :results output latex :

#+BEGIN_SRC R :results output latex :exports results
  library(xtable)
  fit <- lm(mpg ~ wt + hp, data=mtcars)
  print(xtable(summary(fit), caption="Estimations de régression", label="tab:reg"),
        comment=FALSE)
#+END_SRC

#+RESULTS:
#+BEGIN_LaTeX
\begin{table}[ht]
\centering
\begin{tabular}{rrrrr}
  \hline
 & Estimate & Std. Error & t value & Pr($>$$|$t$|$) \\ 
  \hline
(Intercept) & 37.2273 & 1.5988 & 23.28 & 0.0000 \\ 
  wt & -3.8778 & 0.6327 & -6.13 & 0.0000 \\ 
  hp & -0.0318 & 0.0090 & -3.52 & 0.0015 \\ 
   \hline
\end{tabular}
\caption{Estimations de régression} 
\label{tab:reg}
\end{table}
#+END_LaTeX

7. Dépannage et pièges courants

ProblèmeCauseSolution
ggplot2 ou lattice produit une image vide ou corrompueL'objet graphique renvoyé n'a pas été explicitement imprimé en mode non-sessionEnveloppez le tracé dans print(p), ou passez en :session, ou ajoutez output à :results output graphics file.
Fichier graphique produit mais aucun lien inséréMot-clé file ou graphics manquantAssurez-vous que l'en-tête a :results graphics file (les deux mots requis dans Org $\ge$ 9.3).
The system cannot find the path specified (Windows)Exécutable R introuvable dans PATH ou emplacement personnaliséDéfinissez (setq org-babel-R-command "chemin/vers/R --slave --no-save") dans init.el.
Colonnes converties en ligne 0 dans les data frames RLes en-têtes de colonnes du tableau sont traités comme des données d'observationAjoutez :colnames yes aux arguments d'en-tête du bloc.
R en session se bloque sur un calcul lourdLe bloc bloque le processus EmacsBasculez vers le tampon ESS inférieur (C-c C-z) pour surveiller la progression ou interrompre avec C-c C-c.
Traces floues dans les documents exportésDPI raster par défaut (72) trop basAjoutez :res 300 et ajustez :width et :height en conséquence.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Skills associés