R Academy · Lektion

CRAN-Einreichung und Paketpflege

Führen Sie R CMD check aus, beheben Sie NOTE-/WARNING-Probleme und reichen Sie das Paket bei CRAN ein

Lektion 4 von 413 Schritte

CRAN-Einreichung und Paketpflege ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des R Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.

Der Einreichungsprozess für CRAN

CRAN (Comprehensive R Archive Network) ist das offizielle Repository für R-Pakete. Für die Einreichung eines Pakets müssen automatisierte Prüfungen und eine manuelle Überprüfung anhand strenger Richtlinien bestanden werden. Der Ablauf: vorbereiten → prüfen → erstellen → einreichen → Feedback einarbeiten.

devtools::check() — keine Fehler und Warnungen

Vor der Einreichung muss devtools::check() 0 ERRORs und 0 WARNINGs ausgeben. NOTEs sind zulässig, sollten aber möglichst vermieden werden. Häufige Probleme, die durch die Prüfung erkannt werden:

  • Nicht dokumentierte Funktionen oder Argumente
  • Fehlende Paketimporte in DESCRIPTION
  • Beispiele, die einen Fehler verursachen oder zu lange dauern
  • Verwendung globaler Variablen (verwenden Sie 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.

CRAN-Richtlinien — wichtige Regeln

CRAN setzt strenge Richtlinien durch. Die am häufigsten verletzten Regeln:

  • Kein Internetzugriff in Beispielen, Tests oder Vignetten, sofern der Zugriff nicht von der Verfügbarkeit abhängig gemacht wird
  • Ausführungszeit der Beispiele insgesamt < 5 Sekunden — verwenden Sie \dontrun{} oder \donttest{} für langsame Beispiele
  • Keine Schreibzugriffe auf das Home-Verzeichnis der Benutzer — verwenden Sie in Beispielen tempdir()
  • Keine fest codierten Pfade — alle Dateioperationen verwenden relative Pfade oder 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() — Erstellen des Paketarchivs

devtools::build() erstellt ein .tar.gz-Quellarchiv (z. B. mypackage_0.1.0.tar.gz), das für die Einreichung bei CRAN geeignet ist. Verwenden Sie devtools::build(binary = TRUE), um ein Binärpaket für die Verteilung auf Ihrem lokalen Betriebssystem zu erstellen.

# 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() — Interaktive Einreichung

devtools::release() führt eine interaktive Checkliste aus, die Sie durch die abschließenden Prüfungen vor der Einreichung führt, Sie um die Bestätigung der CRAN-Richtlinien bittet und anschließend das .tar.gz über die Web-API von CRAN an https://cran.r-project.org/submit.html übermittelt.

# 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.

Prüfung auf mehreren Plattformen

CRAN prüft Pakete auf mehreren Betriebssystemen und in verschiedenen R-Versionen. Testen Sie Ihr Paket vor der Einreichung umfassend:

  • devtools::check_win_devel() — Einreichung bei win-builder (Windows, R-devel)
  • devtools::check_rhub() — Prüfung auf mehreren Linux- und Windows-Plattformen über R-hub
  • devtools::check_mac_release() — Prüfung unter 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 — Änderungen kommunizieren

NEWS.md dokumentiert Änderungen zwischen Versionen. CRAN verlangt diese Datei für Aktualisierungen. Formatieren Sie jede Version als Überschrift mit Aufzählungspunkten, die die Änderungen beschreiben. Benutzer und CRAN-Reviewer lesen diese Datei, um nachzuvollziehen, was sich geändert hat.

# 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() für Versionsänderungen

usethis::use_version('minor') erhöht die Versionsnummer in DESCRIPTION und fügt in NEWS.md eine neue Platzhalterüberschrift ein. Verwenden Sie semantische Versionierung: 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 für Continuous Integration

Automatisieren Sie R CMD check bei jedem Push mit r-lib/actions. usethis::use_github_action('check-standard') erstellt einen Workflow, der das Paket unter Ubuntu, macOS und Windows sowie in mehreren R-Versionen prüft.

# 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

Umgang mit Feedback von CRAN-Reviewern

CRAN-Reviewer können Änderungen anfordern. Häufige Anfragen:

  • Lang laufende Beispiele in \donttest{} einschließen
  • Für Funktionen, die Benutzeroberflächen öffnen, Schutzprüfungen mit if (interactive()) verwenden
  • Rechtschreibfehler in der Dokumentation beheben (verwenden Sie usethis::use_spell_check())
  • Aussagekräftigere Fehlermeldungen hinzufügen

Antworten Sie zeitnah und reichen Sie das Paket erneut ein. Mehrere Review-Runden sind normal.

# 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

Paketpflege nach der Veröffentlichung

Nach der Annahme durch CRAN umfasst die laufende Pflege:

  • In R-devel-Prüfungen auf Deprecation-Warnungen von Abhängigkeiten achten
  • Fehler in CRAN-Prüfungen innerhalb von 14 Tagen beheben (CRAN-Richtlinie)
  • lifecycle::deprecate_warn() verwenden, um alte Funktionen schrittweise und kontrolliert abzusetzen
  • usethis::use_github_action('pkgdown') für eine Dokumentationswebsite einrichten
# 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.

Schnelltest: CRAN-Richtlinie für Beispiele

Welches Tag sollten Sie verwenden, um ein lang laufendes Beispiel in Ihre Dokumentation aufzunehmen, ohne dass es von der automatisierten CRAN-Prüfung ausgeführt wird?

Zusammenfassung: CRAN-Einreichung und -Pflege

Der CRAN-Veröffentlichungsworkflow:

  • devtools::check() — 0 ERRORs und 0 WARNINGs erforderlich
  • CRAN-Richtlinien: kein Internet in Beispielen, Beispiele < 5 Sek., tempdir() für Schreibzugriffe verwenden
  • devtools::build() — erstellt ein .tar.gz-Archiv
  • devtools::release() — interaktive, geführte Einreichung
  • Plattformübergreifende Prüfungen: check_win_devel(), R-hub
  • NEWS.md mit Versionsüberschriften; Versionsnummer mit use_version('minor') erhöhen
  • GitHub Actions mit r-lib/actions für CI bei jedem Push
  • Innerhalb von 14 Tagen auf Reviewer-Feedback reagieren
Kostenlos starten

Lerne R mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
43
Lektionen
159

Häufig gestellte Fragen

Ist die Lektion „CRAN-Einreichung und Paketpflege“ kostenlos?

Ja — der vollständige Text von „CRAN-Einreichung und Paketpflege“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des R Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „CRAN-Einreichung und Paketpflege“?

Führen Sie R CMD check aus, beheben Sie NOTE-/WARNING-Probleme und reichen Sie das Paket bei CRAN ein Du übst R Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um R Academy zu starten?

Keine Vorkenntnisse erforderlich. R Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „CRAN-Einreichung und Paketpflege“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser R Academy-Lektion Code schreiben und ausführen?

Ja. Jede R Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Paketstruktur mit usethis und devtools
  2. Funktionen mit roxygen2 dokumentieren
  3. Unit-Tests mit testthat
  4. CRAN-Einreichung und Paketpflege
← Zurück zu R Academy