CRAN-innsending og pakkevedlikehold
Kjør R CMD check, løs NOTE- og WARNING-problemer og send inn til CRAN.
CRAN-innsending og pakkevedlikehold er en gratis leksjon i R Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i R Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i R Academy inneholder totalt 4 leksjoner.
Prosessen for innsending til CRAN
CRAN (Comprehensive R Archive Network) er det offisielle pakkearkivet for R. Innsending av en pakke krever at den består automatiserte kontroller og en manuell gjennomgang i henhold til strenge retningslinjer. Prosessen er: klargjør → kontroller → bygg → send inn → gjør endringer basert på tilbakemeldinger.
devtools::check() — ingen feil eller advarsler
Før innsending må devtools::check() gi 0 ERRORs og 0 WARNINGs. NOTEs er tillatt, men bør begrenses. Vanlige problemer som oppdages av kontrollen:
- Udokumenterte funksjoner eller argumenter
- Manglende pakkeimporter i DESCRIPTION
- Eksempler som gir feil eller tar for lang tid
- Bruk av globale variabler (bruk
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-retningslinjer — viktige regler
CRAN håndhever strenge retningslinjer. Dette er reglene som oftest brytes:
- Ingen internettilgang i eksempler, tester eller vignetter med mindre tilgangen avhenger av om den er tilgjengelig
- Eksempler må kjøre på under 5 sekunder totalt — bruk
\dontrun{}eller\donttest{}for langsomme eksempler - Det er ikke tillatt å skrive til brukerens hjemmekatalog — bruk
tempdir()i eksempler - Ingen hardkodede filbaner — alle filoperasjoner må bruke relative baner eller
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() — opprette pakkebunten
devtools::build() oppretter en .tar.gz-kildepakke (for eksempel mypackage_0.1.0.tar.gz) som kan sendes inn til CRAN. Bruk devtools::build(binary = TRUE) for å opprette en binærpakke for distribusjon til ditt lokale operativsystem.
# 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() — interaktiv innsending
devtools::release() kjører en interaktiv sjekkliste som veileder deg gjennom de siste kontrollene før innsending, ber deg bekrefte CRAN-retningslinjene og sender deretter .tar.gz-filen til https://cran.r-project.org/submit.html ved hjelp av CRANs web-API.
# 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.Kontroll på flere plattformer
CRAN kontrollerer pakker på flere operativsystemer og R-versjoner. Test bredt før innsending:
devtools::check_win_devel()— sender pakken til win-builder (Windows, R-devel)devtools::check_rhub()— kontrollerer på flere Linux- og Windows-plattformer via R-hubdevtools::check_mac_release()— kontroll på 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 — kommunisere endringer
NEWS.md dokumenterer endringer mellom versjoner. CRAN krever denne filen ved oppdateringer. Formater hver versjon som en overskrift med punktlister som beskriver hva som er endret. Brukere og CRAN-kontrollører leser denne filen for å forstå endringene.
# 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() for å oppdatere versjonen
usethis::use_version('minor') øker versjonsnummeret i DESCRIPTION og legger til en ny plassholderoverskrift i NEWS.md. Bruk semantisk versjonering: 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 for kontinuerlig integrasjon
Automatiser R CMD check ved hver push ved hjelp av r-lib/actions. usethis::use_github_action('check-standard') oppretter en arbeidsflyt som kontrollerer pakken på Ubuntu, macOS og Windows med flere R-versjoner.
# 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 checksHåndtere tilbakemeldinger fra CRAN-kontrollører
CRAN-kontrollører kan be om endringer. Vanlige forespørsler:
- Legg eksempler som tar lang tid, i
\donttest{} - Bruk
if (interactive())-betingelser for funksjoner som åpner brukergrensesnitt - Rett stavefeil i dokumentasjonen (bruk
usethis::use_spell_check()) - Legg til mer beskrivende feilmeldinger
Svar raskt og send inn på nytt. Det er normalt med flere runder med gjennomgang.
# 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() # resubmitVedlikehold av pakken etter lansering
Etter at CRAN har godkjent pakken, omfatter det løpende vedlikeholdet:
- Følg med på advarsler om foreldede funksjoner fra avhengigheter i kontroller med R-devel
- Håndter feil i CRAN-kontroller innen 14 dager (CRAN-retningslinjene)
- Bruk
lifecycle::deprecate_warn()for å fase ut gamle funksjoner på en kontrollert måte - Sett opp
usethis::use_github_action('pkgdown')for et dokumentasjonsnettsted
# 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.Hurtigsjekk: CRANs regler for eksempler
Hvilken tagg bør du bruke for å ta med et eksempel som tar lang tid, uten at CRANs automatiserte kontroll kjører det?
Oppsummering av CRAN-innsending og vedlikehold
Arbeidsflyten for en CRAN-lansering:
devtools::check()— krever 0 ERRORs og 0 WARNINGs- CRAN-retningslinjer: ingen internettilgang i eksempler, eksempler på under 5 sekunder, bruk
tempdir()for skriving devtools::build()— oppretter en.tar.gz-pakkedevtools::release()— veiledet, interaktiv innsending- Kontroll på flere plattformer:
check_win_devel(), R-hub NEWS.mdmed versjonsoverskrifter; oppdater versjonen meduse_version('minor')- GitHub Actions med
r-lib/actionsfor CI ved hver push - Svar på tilbakemeldinger fra kontrollører innen 14 dager
Lær deg R med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 43
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «CRAN-innsending og pakkevedlikehold» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien R Academy, inkludert «CRAN-innsending og pakkevedlikehold», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i R Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «CRAN-innsending og pakkevedlikehold»?
Kjør R CMD check, løs NOTE- og WARNING-problemer og send inn til CRAN. Du øver på R Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med R Academy?
Ingen tidligere erfaring er nødvendig. R Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «CRAN-innsending og pakkevedlikehold»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne R Academy-leksjonen?
Ja. Alle R Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Pakkestruktur med usethis og devtools
- Dokumentere funksjoner med roxygen2
- Enhetstesting med testthat
- CRAN-innsending og pakkevedlikehold