Soumission à CRAN et maintenance des paquets
Exécutez R CMD check, corrigez les problèmes NOTE/WARNING et soumettez le paquet à CRAN.
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 -20devtools::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-hubdevtools::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 releasesGitHub 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 checksGé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() # resubmitMaintenance 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.gzdevtools::release()— soumission interactive guidée- Vérifications multiplateformes :
check_win_devel(), R-hub NEWS.mdavec des titres de version ; augmenter la version avecuse_version('minor')- GitHub Actions avec
r-lib/actionspour l'intégration continue à chaque envoi - Répondre aux commentaires des réviseurs dans un délai de 14 jours
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
- Structure d’un paquet avec usethis et devtools
- Documenter des fonctions avec roxygen2
- Tests unitaires avec testthat
- Soumission à CRAN et maintenance des paquets