R expert — Programmation
Objectifs pédagogiques
- Acquérir des notions avancées de programmation avec R.
Programme détaillé
Rappel des structures des objets et fonctionnement interne 1h
Programmation de base 2h
Programmation objets S3 2h
Comparaison de performances entre structure vectorielle et boucles 1h
Amélioration du code (Rcpp, parallélisation) 3h
Création d’un package avec plusieurs objectifs (gestion de projet, diffusion d’outils…) 3h
Public visé
Toute personne souhaitant développer une utilisation avancée de R : statisticiens, data analysts, data scientists…
Prérequis
Parmi nos formations au langage R, cette formation est le niveau 3. Elle requiert une bonne maîtrise et une utilisation régulière de R (contenu des formations niveau 1 - R initiation et niveau 2 - R intermédiaire).
Approche pédagogique
Calculés à partir de 20 avis recueillis depuis 04/12/2018, lors de 3 sessions de cette formation.
Du script au package R : objets S3, performance et diffusion du code
Un utilisateur avancé de R finit par accumuler des fonctions recopiées d’un script à l’autre, avec des variantes qui divergent au fil du temps. Le package est la réponse de R à ce problème. Ce n’est pas réservé aux auteurs d’outils publiés : c’est d’abord une façon d’organiser, de documenter et de tester son propre code.
Pourquoi un package, même en interne
En octobre 2026, le CRAN, le dépôt officiel de R ouvert en 1997, propose plus de 25 000 packages. Tous respectent une même structure : un dossier R/ pour les fonctions, un fichier DESCRIPTION pour les métadonnées et les dépendances, une documentation par fonction. La commande R CMD check vérifie l’ensemble : syntaxe, documentation, exemples, tests. Un package interne profite des mêmes garde-fous : une fonction modifiée est la même pour toute l’équipe, sa documentation est accessible par ?fonction, et ses dépendances sont déclarées au lieu d’être supposées.
S3, l’objet à la manière de R
Le système d’objets le plus utilisé de R, dit S3, remonte au langage S et à l’ouvrage Statistical Models in S de John Chambers et Trevor Hastie (1992). Il est minimaliste : un objet est une liste munie d’un attribut class, et une fonction générique choisit la méthode à appeler selon cette classe. C’est ce mécanisme qui permet à print() ou à summary() d’afficher un résultat adapté selon qu’on leur donne une régression ou un tableau.
resume <- function(x, ...) UseMethod("resume")
resume.default <- function(x, ...) summary(x)
resume.enquete <- function(x, ...) {
cat("Enquête", x$nom, ":", nrow(x$donnees), "répondants\n")
invisible(x)
}
e <- structure(list(nom = "Emploi 2026", donnees = reponses), class = "enquete")
resume(e) # appelle resume.enquete()
Quand R ne va pas assez vite
R est un langage interprété : une boucle for qui traite les éléments un par un est souvent bien plus lente qu’une opération vectorielle équivalente, qui s’appuie sur du code compilé. La première optimisation consiste donc à vectoriser, et à mesurer avant et après (system.time()). Quand une boucle est inévitable, le package Rcpp, maintenu par Dirk Eddelbuettel depuis 2008 et refondu avec Romain François, permet d’écrire la partie critique en C++ et de l’appeler depuis R comme une fonction ordinaire. La parallélisation, enfin, répartit des calculs indépendants sur plusieurs cœurs : le package parallel, livré avec R, en fournit les outils de base.
Pour diffuser une analyse sous forme d’application interactive plutôt que de package, voir la formation R expert — Créer une application R Shiny.