0Pricing
R Academy · Pelajaran

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 -20

devtools::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-hub
  • devtools::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 releases

GitHub 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 checks

Menangani 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()  # resubmit

Pemeliharaan 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.gz
  • devtools::release() — pengiriman interaktif dengan panduan
  • Pemeriksaan lintas platform: check_win_devel(), R-hub
  • NEWS.md dengan judul versi; naikkan versi dengan use_version('minor')
  • GitHub Actions dengan r-lib/actions untuk 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

  1. Struktur Paket dengan usethis dan devtools
  2. Mendokumentasikan Fungsi dengan roxygen2
  3. Pengujian Unit dengan testthat
  4. Pengiriman ke CRAN dan Pemeliharaan Paket
← Kembali ke R Academy