R Academy · Lekcja

Przesyłanie pakietu do CRAN i jego utrzymanie

Uruchamiaj R CMD check, rozwiązuj problemy typu NOTE/WARNING i przesyłaj pakiety do CRAN.

Lekcja 4 z 413 kroki

Przesyłanie pakietu do CRAN i jego utrzymanie to bezpłatna lekcja R Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej R Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs R Academy zawiera 4 lekcji w sumie.

Proces zgłaszania pakietu do CRAN

CRAN (Comprehensive R Archive Network) to oficjalne repozytorium pakietów R. Zgłoszenie pakietu wymaga przejścia automatycznych kontroli oraz weryfikacji przez człowieka pod kątem rygorystycznych zasad. Proces wygląda następująco: przygotowanie → sprawdzenie → kompilacja → zgłoszenie → poprawki na podstawie uwag.

devtools::check() — zero błędów i ostrzeżeń

Przed zgłoszeniem pakietu funkcja devtools::check() musi zwrócić 0 komunikatów ERROR i 0 komunikatów WARNING. Komunikaty NOTE są dozwolone, ale należy je ograniczyć do minimum. Typowe problemy wykrywane przez funkcję check:

  • Nieudokumentowane funkcje lub argumenty
  • Brak importów pakietów w pliku DESCRIPTION
  • Przykłady, które kończą się błędem lub trwają zbyt długo
  • Użycie zmiennych globalnych (należy użyć 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.

Zasady CRAN — najważniejsze reguły

CRAN egzekwuje rygorystyczne zasady. Najczęściej naruszane reguły to:

  • Brak dostępu do internetu w przykładach, testach i winietach, chyba że dostępność jest sprawdzana warunkowo
  • Łączny czas wykonywania przykładów < 5 sekund — dla wolnych przykładów należy użyć \dontrun{} lub \donttest{}
  • Zakaz zapisu w katalogu domowym użytkownika — w przykładach należy używać tempdir()
  • Zakaz ścieżek zapisanych na stałe — wszystkie operacje na plikach muszą korzystać ze ścieżek względnych lub 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() — tworzenie pakietu

devtools::build() tworzy źródłowy pakiet w archiwum .tar.gz (np. mypackage_0.1.0.tar.gz) odpowiedni do zgłoszenia do CRAN. Użyj devtools::build(binary = TRUE), aby utworzyć pakiet binarny przeznaczony do dystrybucji w lokalnym systemie operacyjnym.

# 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() — interaktywne zgłoszenie

devtools::release() uruchamia interaktywną listę kontrolną, która prowadzi przez końcowe kontrole przed zgłoszeniem, prosi o potwierdzenie zgodności z zasadami CRAN, a następnie wysyła plik .tar.gz pod adres https://cran.r-project.org/submit.html, korzystając z internetowego API 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.

Sprawdzanie na wielu platformach

CRAN sprawdza pakiety na wielu systemach operacyjnych i w wielu wersjach R. Przed zgłoszeniem wykonaj możliwie szerokie testy:

  • devtools::check_win_devel() — zgłoszenie do win-builder (Windows, R-devel)
  • devtools::check_rhub() — sprawdzanie na wielu platformach Linux/Windows za pośrednictwem R-hub
  • devtools::check_mac_release() — sprawdzanie na 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 — informowanie o zmianach

Plik NEWS.md dokumentuje zmiany między wersjami. CRAN wymaga jego dołączania przy aktualizacjach. Każdą wersję należy zapisać jako nagłówek z listą punktowaną opisującą zmiany. Użytkownicy i recenzenci CRAN czytają ten plik, aby dowiedzieć się, co się zmieniło.

# 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() — zmiana numeru wersji

usethis::use_version('minor') zwiększa numer wersji w pliku DESCRIPTION i dodaje nowy pusty nagłówek w pliku NEWS.md. Należy stosować wersjonowanie semantyczne: 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 do ciągłej integracji

Automatyzuj uruchamianie R CMD check przy każdym wysłaniu zmian, korzystając z r-lib/actions. usethis::use_github_action('check-standard') tworzy workflow sprawdzający pakiet na Ubuntu, macOS i Windows w wielu wersjach 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

Obsługa uwag recenzentów CRAN

Recenzenci CRAN mogą poprosić o wprowadzenie zmian. Typowe prośby obejmują:

  • Opakowanie długo działających przykładów w \donttest{}
  • Użycie osłon if (interactive()) dla funkcji otwierających interfejsy użytkownika
  • Poprawienie pisowni w dokumentacji (za pomocą usethis::use_spell_check())
  • Dodanie bardziej opisowych komunikatów o błędach

Należy szybko odpowiedzieć i ponownie zgłosić pakiet. Kilka rund weryfikacji to normalna sytuacja.

# 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

Utrzymanie pakietu po wydaniu

Po zaakceptowaniu pakietu przez CRAN bieżące utrzymanie obejmuje:

  • Monitorowanie ostrzeżeń o wycofaniu z użycia pochodzących od zależności podczas kontroli w R-devel
  • Usuwanie niepowodzeń kontroli CRAN w ciągu 14 dni (zgodnie z zasadami CRAN)
  • Używanie lifecycle::deprecate_warn() do bezpiecznego wycofywania starych funkcji z użycia
  • Skonfigurowanie usethis::use_github_action('pkgdown') w celu utworzenia witryny dokumentacji
# 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.

Szybkie sprawdzenie: zasady CRAN dotyczące przykładów

Jakiego znacznika należy użyć, aby umieścić w dokumentacji długo działający przykład, ale nie dopuścić do jego wykonania przez automatyczny moduł sprawdzający CRAN?

Powtórzenie: zgłaszanie i utrzymanie pakietu w CRAN

Proces wydawania pakietu w CRAN:

  • devtools::check() — wymagane 0 komunikatów ERROR i 0 komunikatów WARNING
  • Zasady CRAN: brak internetu w przykładach, przykłady krótsze niż 5 sekund, używanie tempdir() do zapisu
  • devtools::build() — tworzy archiwum .tar.gz
  • devtools::release() — interaktywne zgłoszenie prowadzone krok po kroku
  • Sprawdzanie na wielu platformach: check_win_devel(), R-hub
  • Plik NEWS.md z nagłówkami wersji; zmianę numeru wersji wykonuje się za pomocą use_version('minor')
  • GitHub Actions z użyciem r-lib/actions do ciągłej integracji przy każdym wysłaniu zmian
  • Odpowiadanie na uwagi recenzentów w ciągu 14 dni
Bezpłatny start

Ucz się R dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
43
Lekcje
159

Często zadawane pytania

Czy lekcja „Przesyłanie pakietu do CRAN i jego utrzymanie” jest bezpłatna?

Tak — pełny tekst „Przesyłanie pakietu do CRAN i jego utrzymanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu R Academy, przejdź na CoddyKit PRO. Kurs R Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Przesyłanie pakietu do CRAN i jego utrzymanie”?

Uruchamiaj R CMD check, rozwiązuj problemy typu NOTE/WARNING i przesyłaj pakiety do CRAN. Ćwiczysz R Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć R Academy?

Nie wymagamy żadnego doświadczenia. R Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Przesyłanie pakietu do CRAN i jego utrzymanie”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji R Academy?

Tak. Każda lekcja R Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Struktura pakietu za pomocą usethis i devtools
  2. Dokumentowanie funkcji za pomocą roxygen2
  3. Testy jednostkowe za pomocą testthat
  4. Przesyłanie pakietu do CRAN i jego utrzymanie
← Powrót do R Academy