Pengiriman ke CRAN dan Pemeliharaan Paket
Jalankan R CMD check, selesaikan masalah NOTE/WARNING, lalu kirimkan ke CRAN.
Pengiriman ke CRAN dan Pemeliharaan Paket adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.
Proses Pengiriman ke CRAN
CRAN (Comprehensive R Archive Network) adalah repositori paket R resmi. Pengiriman paket mengharuskan paket tersebut lolos pemeriksaan otomatis dan peninjauan manusia berdasarkan kebijakan yang ketat. Prosesnya: siapkan → periksa → bangun → kirim → revisi berdasarkan masukan.
devtools::check() — Nol Kesalahan dan Peringatan
Sebelum dikirim, devtools::check() harus menghasilkan 0 KESALAHAN dan 0 PERINGATAN. CATATAN diperbolehkan, tetapi sebaiknya diminimalkan. Masalah umum yang ditemukan oleh pemeriksaan:
- Fungsi atau argumen yang tidak terdokumentasi
- Impor paket yang tidak dicantumkan dalam DESCRIPTION
- Contoh yang menghasilkan galat atau membutuhkan waktu terlalu lama
- Penggunaan variabel global (gunakan
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.Kebijakan CRAN — Aturan Utama
CRAN memberlakukan kebijakan yang ketat. Berikut aturan yang paling sering dilanggar:
- Tidak boleh mengakses internet dalam contoh, pengujian, atau vignette kecuali akses tersebut bergantung pada ketersediaan
- Waktu berjalan contoh < 5 detik secara keseluruhan — gunakan
\dontrun{}atau\donttest{}untuk contoh yang lambat - Tidak boleh menulis ke direktori beranda pengguna — gunakan
tempdir()dalam contoh - Tidak boleh menggunakan jalur yang ditulis secara langsung — semua operasi berkas harus menggunakan jalur relatif atau
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() — Membuat Bundel Paket
devtools::build() membuat bundel sumber .tar.gz (misalnya, mypackage_0.1.0.tar.gz) yang sesuai untuk dikirim ke CRAN. Gunakan devtools::build(binary = TRUE) untuk membuat paket biner yang akan didistribusikan ke OS lokal Anda.
# 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() — Pengiriman Interaktif
devtools::release() menjalankan daftar periksa interaktif yang memandu Anda melalui pemeriksaan akhir sebelum pengiriman, meminta Anda mengonfirmasi kebijakan CRAN, lalu mengirimkan .tar.gz ke https://cran.r-project.org/submit.html menggunakan API web 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.Memeriksa di Berbagai Platform
CRAN memeriksa paket pada berbagai OS dan versi R. Lakukan pengujian secara luas sebelum mengirimkan paket:
devtools::check_win_devel()— mengirimkan paket ke win-builder (Windows, R-devel)devtools::check_rhub()— memeriksa pada berbagai platform Linux/Windows melalui R-hubdevtools::check_mac_release()— pemeriksaan 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 — Mengomunikasikan Perubahan
NEWS.md mendokumentasikan perubahan antarversi. CRAN mewajibkannya untuk pembaruan. Format setiap versi sebagai judul dengan butir-butir yang menjelaskan perubahan. Pengguna dan peninjau CRAN membaca berkas ini untuk memahami apa yang berubah.
# 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() untuk Menaikkan Versi
usethis::use_version('minor') menaikkan nomor versi dalam DESCRIPTION dan menambahkan judul sementara baru dalam NEWS.md. Gunakan pembuatan versi semantik: 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 untuk Integrasi Berkelanjutan
Otomatiskan pemeriksaan R CMD pada setiap pengiriman dengan menggunakan r-lib/actions. usethis::use_github_action('check-standard') membuat alur kerja yang melakukan pemeriksaan pada Ubuntu, macOS, dan Windows di berbagai versi 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 checksMenangani Masukan Peninjau CRAN
Peninjau CRAN mungkin meminta perubahan. Permintaan yang umum meliputi:
- Membungkus contoh yang berjalan lama dengan
\donttest{} - Menggunakan penjaga
if (interactive())untuk fungsi yang membuka antarmuka pengguna - Memperbaiki ejaan dalam dokumentasi (gunakan
usethis::use_spell_check()) - Menambahkan pesan galat yang lebih deskriptif
Tanggapi dengan segera dan kirimkan ulang. Beberapa putaran peninjauan adalah hal yang wajar.
# 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() # resubmitPemeliharaan Paket Setelah Rilis
Setelah diterima oleh CRAN, pemeliharaan berkelanjutan meliputi:
- Mengawasi peringatan penghentian penggunaan dari dependensi dalam pemeriksaan R-devel
- Menangani kegagalan pemeriksaan CRAN dalam 14 hari (kebijakan CRAN)
- Menggunakan
lifecycle::deprecate_warn()untuk menghentikan penggunaan fungsi lama secara bertahap - Menyiapkan
usethis::use_github_action('pkgdown')untuk situs web dokumentasi
# 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.Pemeriksaan Singkat: Kebijakan Contoh CRAN
Tag apa yang harus Anda gunakan untuk menyertakan contoh yang berjalan lama dalam dokumentasi tanpa menjalankannya oleh pemeriksa otomatis CRAN?
Rangkuman Pengiriman dan Pemeliharaan CRAN
Alur kerja rilis ke CRAN:
devtools::check()— wajib menghasilkan 0 KESALAHAN dan 0 PERINGATAN- Kebijakan CRAN: tidak boleh ada internet dalam contoh, contoh < 5 detik, gunakan
tempdir()untuk penulisan devtools::build()— membuat bundel.tar.gzdevtools::release()— pengiriman interaktif dengan panduan- Pemeriksaan lintas platform:
check_win_devel(), R-hub NEWS.mddengan judul versi; naikkan versi denganuse_version('minor')- GitHub Actions dengan
r-lib/actionsuntuk integrasi berkelanjutan pada setiap pengiriman - Menanggapi masukan peninjau dalam 14 hari
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengiriman ke CRAN dan Pemeliharaan Paket” gratis?
Ya — teks lengkap “Pengiriman ke CRAN dan Pemeliharaan Paket” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pengiriman ke CRAN dan Pemeliharaan Paket”?
Jalankan R CMD check, selesaikan masalah NOTE/WARNING, lalu kirimkan ke CRAN. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai R Academy?
Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pengiriman ke CRAN dan Pemeliharaan Paket” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?
Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Struktur Paket dengan usethis dan devtools
- Mendokumentasikan Fungsi dengan roxygen2
- Pengujian Unit dengan testthat
- Pengiriman ke CRAN dan Pemeliharaan Paket