R Academy · Leçon

Soumission à CRAN et maintenance des paquets

Exécutez R CMD check, corrigez les problèmes NOTE/WARNING et soumettez le paquet à CRAN.

Leçon 4 sur 413 étapes

Soumission à CRAN et maintenance des paquets est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.

Le processus de soumission à CRAN

CRAN (Comprehensive R Archive Network) est le dépôt officiel des paquets R. Soumettre un paquet nécessite de réussir des vérifications automatisées et un examen humain au regard de règles strictes. Le processus : préparer → vérifier → construire → soumettre → réviser en fonction des commentaires.

devtools::check() — zéro erreur et avertissement

Avant la soumission, devtools::check() doit produire 0 ERREUR et 0 AVERTISSEMENT. Les NOTES sont autorisées, mais doivent être réduites au minimum. Problèmes courants détectés par la vérification :

  • Fonctions ou arguments non documentés
  • Imports de paquets manquants dans DESCRIPTION
  • Exemples qui génèrent une erreur ou prennent trop de temps
  • Utilisation de variables globales (utilisez utils::globalVariables())
# devtools::check()  # or Ctrl+Shift+E
#
# Target output:
# -- R CMD check results -------------------------
# Duration: 45.3s
# 0 errors v | 0 warnings v | 1 note x
# NOTE: New submission.
#
# 'New submission' is an expected NOTE for first-time packages.
# All actual ERRORs and WARNINGs must be fixed before submitting.

Politiques de CRAN — règles essentielles

CRAN applique des règles strictes. Voici les règles les plus souvent enfreintes :

  • Aucun accès à Internet dans les exemples, les tests ou les vignettes, sauf s'il est conditionné par la disponibilité
  • Durée totale des exemples < 5 secondes — utilisez \dontrun{} ou \donttest{} pour les exemples longs
  • Ne rien écrire dans le répertoire personnel de l'utilisateur — utilisez tempdir() dans les exemples
  • Aucun chemin codé en dur — toutes les opérations sur les fichiers utilisent des chemins relatifs ou tempdir()
# Correct: examples that write to tempdir
# #' @examples
# #' tmp <- tempfile()
# #' write.csv(mtcars, tmp)
# #' read.csv(tmp)
# #' unlink(tmp)
#
# Correct: skip slow or network examples
# #' @examples
# #' \dontrun{
# #'   # slow operation
# #'   fit_big_model(huge_dataset)
# #' }

devtools::build() — créer l'archive du paquet

devtools::build() crée une archive source .tar.gz (par exemple mypackage_0.1.0.tar.gz) adaptée à la soumission à CRAN. Utilisez devtools::build(binary = TRUE) pour créer un paquet binaire à distribuer sur votre OS local.

# devtools::build()
# => mypackage_0.1.0.tar.gz
#
# What build does:
# 1. Runs devtools::document() to regenerate man/ and NAMESPACE
# 2. Compiles vignettes (if any)
# 3. Bundles R/, man/, DESCRIPTION, NAMESPACE, tests/ etc.
# 4. Excludes files listed in .Rbuildignore
#
# Inspect the bundle:
# tar -tzf mypackage_0.1.0.tar.gz | head -20

devtools::release() — soumission interactive

devtools::release() exécute une liste de vérification interactive qui vous guide lors des derniers contrôles avant soumission, vous demande de confirmer les politiques de CRAN, puis soumet le .tar.gz à https://cran.r-project.org/submit.html à l'aide de l'API web de CRAN.

# devtools::release()
#
# Interactive questions include:
# - Have you checked on R-devel?
# - Have you checked on Windows with win-builder?
# - Is there a single top-level .R file in tests/?
# - Have you removed donttest{} for essential examples?
# - Is the package correctly versioned?
#
# After answering, it submits and emails the CRAN team.

Vérification sur plusieurs plateformes

CRAN vérifie les paquets sur plusieurs OS et versions de R. Effectuez des tests étendus avant de soumettre :

  • devtools::check_win_devel() — soumettre à win-builder (Windows, R-devel)
  • devtools::check_rhub() — vérifier sur plusieurs plateformes Linux/Windows via R-hub
  • devtools::check_mac_release() — vérification sur macOS
# Check on Windows R-devel (submits to win-builder, results emailed):
# devtools::check_win_devel()
#
# Check on multiple platforms via R-hub:
# rhub::check_for_cran()   # requires rhub package and account
#
# Minimum: check locally + win-builder before every CRAN submission
cat('CRAN checks on Windows, macOS, and multiple Linux distros
')

NEWS.md — communiquer les changements

NEWS.md documente les changements entre les versions. CRAN l'exige pour les mises à jour. Formatez chaque version comme un titre accompagné de puces décrivant les changements. Les utilisateurs et les réviseurs de CRAN le lisent pour comprendre ce qui a changé.

# NEWS.md format:
#
# # mypackage 0.2.0
# * Added subtract() function for element-wise subtraction.
# * add() now accepts complex numbers.
# * Fixed bug where add(NA, x) returned 0 instead of NA.
#
# # mypackage 0.1.0
# * Initial CRAN release.
# * Core add() function for numeric addition.
cat('usethis::use_news_md() creates NEWS.md with the right format
')

usethis::use_version() pour augmenter la version

usethis::use_version('minor') incrémente le numéro de version dans DESCRIPTION et ajoute un nouveau titre d'attente dans NEWS.md. Utilisez le versionnage sémantique : major.minor.patch.

# Version bump commands:
# usethis::use_version('patch')   # 0.1.0 -> 0.1.1  (bug fixes)
# usethis::use_version('minor')   # 0.1.0 -> 0.2.0  (new features)
# usethis::use_version('major')   # 0.1.0 -> 1.0.0  (breaking changes)
# usethis::use_version('dev')     # 0.1.0 -> 0.1.0.9000 (dev suffix)
#
# CRAN packages should NOT have a dev suffix (e.g., 0.9000)
# Dev suffix signals work-in-progress on GitHub between releases

GitHub Actions pour l'intégration continue

Automatisez la vérification R CMD à chaque envoi en utilisant r-lib/actions. usethis::use_github_action('check-standard') crée un flux de travail qui effectue des vérifications sur Ubuntu, macOS et Windows avec plusieurs versions de R.

# usethis::use_github_action('check-standard')
# Creates .github/workflows/R-CMD-check.yaml
#
# The workflow:
# - triggers on push and pull_request
# - runs on ubuntu-latest, macos-latest, windows-latest
# - tests on R release, R devel, and R oldrel
# - caches installed packages for faster runs
# - reports check results as GitHub status checks

Gérer les commentaires des réviseurs de CRAN

Les réviseurs de CRAN peuvent demander des changements. Demandes courantes :

  • Encadrer les exemples longs avec \donttest{}
  • Utiliser des gardes if (interactive()) pour les fonctions qui ouvrent des interfaces utilisateur
  • Corriger l'orthographe dans la documentation (utilisez usethis::use_spell_check())
  • Ajouter des messages d'erreur plus descriptifs

Répondez rapidement et soumettez à nouveau le paquet. Plusieurs cycles de révision sont normaux.

# Spell check DESCRIPTION and man/ pages:
# usethis::use_spell_check()
# spelling::spell_check_package()  # run the check
#
# Add words to WORDLIST to ignore false positives:
# spelling::update_wordlist()
#
# After making all changes:
# devtools::check()  # confirm 0 errors/warnings
# devtools::release()  # resubmit

Maintenance du paquet après sa publication

Après l'acceptation par CRAN, la maintenance continue comprend :

  • Surveiller les avertissements d'obsolescence des dépendances lors des vérifications avec R-devel
  • Corriger les échecs de vérification de CRAN dans un délai de 14 jours (politique de CRAN)
  • Utiliser lifecycle::deprecate_warn() pour rendre progressivement obsolètes les anciennes fonctions
  • Configurer usethis::use_github_action('pkgdown') pour créer un site de documentation
# Mark a function as deprecated:
# library(lifecycle)
#
# old_add <- function(x, y) {
#   lifecycle::deprecate_warn('0.2.0', 'old_add()', 'add()')
#   add(x, y)
# }
#
# Users see: 'old_add()' was deprecated in mypackage 0.2.0.
# Please use 'add()' instead.

Vérification rapide : politique de CRAN concernant les exemples

Quelle balise devez-vous utiliser pour inclure dans votre documentation un exemple long sans que le vérificateur automatisé de CRAN ne l'exécute ?

Récapitulatif de la soumission et de la maintenance sur CRAN

Le flux de publication sur CRAN :

  • devtools::check() — 0 ERREUR et 0 AVERTISSEMENT requis
  • Politiques de CRAN : pas d'Internet dans les exemples, exemples de moins de 5 secondes, utiliser tempdir() pour les écritures
  • devtools::build() — crée une archive .tar.gz
  • devtools::release() — soumission interactive guidée
  • Vérifications multiplateformes : check_win_devel(), R-hub
  • NEWS.md avec des titres de version ; augmenter la version avec use_version('minor')
  • GitHub Actions avec r-lib/actions pour l'intégration continue à chaque envoi
  • Répondre aux commentaires des réviseurs dans un délai de 14 jours
Gratuit pour commencer

Apprends R avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
43
Leçons
159

Questions Fréquemment Posées

La leçon « Soumission à CRAN et maintenance des paquets » est-elle gratuite ?

Oui — le texte complet de « Soumission à CRAN et maintenance des paquets » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Soumission à CRAN et maintenance des paquets » ?

Exécutez R CMD check, corrigez les problèmes NOTE/WARNING et soumettez le paquet à CRAN. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer R Academy ?

Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Soumission à CRAN et maintenance des paquets » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon R Academy ?

Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Structure d’un paquet avec usethis et devtools
  2. Documenter des fonctions avec roxygen2
  3. Tests unitaires avec testthat
  4. Soumission à CRAN et maintenance des paquets
← Retour à R Academy