0Pricing
R Academy · Pelajaran

Error, Peringatan, dan Pesan dalam R

Pahami tiga jenis sinyal dan kapan masing-masing dipicu.

Error, Peringatan, dan Pesan dalam R adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Sistem Kondisi R

R memiliki sistem kondisi formal untuk menyampaikan masalah. Ada tiga kelas kondisi utama: galat (fatal — menghentikan eksekusi), peringatan (tidak fatal — dicetak setelah kode selesai), dan pesan (informatif — dikirim ke stderr).

# Each condition type behaves differently
message('This is a message')
warning('This is a warning')
# stop() would halt here, so wrap it
tryCatch(stop('This is an error'), error = function(e) print(e))

stop() — Menghasilkan Galat

stop(msg) memberi sinyal kondisi galat. Eksekusi langsung berhenti dan pesan galat ditampilkan. Fungsi ini digunakan di dalam fungsi untuk membatalkan proses ketika input tidak valid atau situasi yang tidak dapat dipulihkan terdeteksi.

divide <- function(x, y) {
  if (y == 0) stop('Division by zero is not allowed')
  x / y
}
tryCatch(divide(10, 0), error = function(e) cat('Error:', conditionMessage(e), '\n'))
divide(10, 2)

warning() — Peringatan Tidak Fatal

warning(msg) memberi sinyal kondisi peringatan. Berbeda dari galat, peringatan tidak menghentikan eksekusi — fungsi terus berjalan dan peringatan dikumpulkan. Secara default, peringatan dicetak setelah semua kode selesai, atau langsung jika options(warn=1) ditetapkan.

safe_sqrt <- function(x) {
  if (x < 0) {
    warning('Negative input; returning NaN')
    return(NaN)
  }
  sqrt(x)
}
result <- safe_sqrt(-4)
cat('Result:', result, '\n')

message() — Kondisi Informatif

message(msg) memberi sinyal kondisi pesan. Pesan ini dikirim ke stderr, menyertakan baris baru otomatis, dan dapat disenyapkan dengan suppressMessages(). Gunakan fungsi ini untuk pembaruan kemajuan dalam fungsi, bukan untuk galat atau peringatan.

load_data <- function(n) {
  message('Loading ', n, ' records...')
  seq_len(n)
}
data <- suppressMessages(load_data(100))
cat('Got', length(data), 'records\n')

Objek simpleError dan simpleWarning

Saat R membuat kondisi, R membungkus pesan tersebut dalam objek kondisi. simpleError('msg') dan simpleWarning('msg') membuat objek kondisi secara manual. Anda dapat memeriksanya dengan conditionMessage().

e <- simpleError('something went wrong')
w <- simpleWarning('this looks suspicious')
cat('Error class   :', class(e), '\n')
cat('Warning class :', class(w), '\n')
cat('Error message :', conditionMessage(e), '\n')
cat('Warning msg   :', conditionMessage(w), '\n')

conditionMessage() dan conditionCall()

conditionMessage(cond) mengekstrak pesan teks dari objek kondisi apa pun. conditionCall(cond) mengekstrak pemanggilan yang memicu kondisi tersebut. Keduanya berguna di dalam penangan galat untuk mencatat atau memberi sinyal ulang kondisi.

tryCatch(
  log(-1),
  warning = function(w) {
    cat('Caught warning :', conditionMessage(w), '\n')
    cat('From call      :', deparse(conditionCall(w)), '\n')
  }
)

options(warn = 2) — Memperlakukan Peringatan sebagai Galat

Menetapkan options(warn = 2) mengubah semua peringatan menjadi galat sehingga eksekusi langsung berhenti. Ini berguna selama pengembangan untuk menemukan kode yang menghasilkan peringatan sejak awal. Pulihkan dengan options(warn = 0).

old_warn <- options(warn = 0)  # default: collect warnings
log(-1)  # just a warning
options(warn = 0)
tryCatch({
  options(warn = 2)
  log(-1)   # now fatal
}, error = function(e) cat('Caught as error:', conditionMessage(e), '\n'),
finally = options(old_warn))

Peringatan Langsung dan Tertunda

Dengan options(warn = 0) (default), peringatan dikumpulkan dan dicetak di akhir. Dengan options(warn = 1), setiap peringatan langsung dicetak saat terjadi. Dengan warn = 2, peringatan menjadi galat.

# warn=1: print warnings immediately as they happen
old <- options(warn = 1)
result1 <- log(-1)
result2 <- sqrt(-4)
cat('Results:', result1, result2, '\n')
options(old)

Galat dan Peringatan: Fatal dan Tidak Fatal

Perbedaan pentingnya adalah: galat menghentikan eksekusi sepenuhnya kecuali ditangkap oleh penangan. Peringatan dicatat, tetapi eksekusi terus berjalan. Artinya, input yang buruk dapat secara diam-diam menghasilkan hasil yang salah jika Anda menggunakan peringatan pada situasi yang seharusnya menggunakan galat.

# With warning: execution continues
f_warn <- function(x) { if (x < 0) warning('negative'); x^2 }
cat('warn result:', f_warn(-3), '\n')  # still computes 9

# With error: execution stops
f_stop <- function(x) { if (x < 0) stop('negative'); x^2 }
tryCatch(f_stop(-3), error = function(e) cat('stopped:', e$message, '\n'))

Penyarangan Kondisi

Kondisi dapat dimunculkan di dalam penangan kondisi lain. Penangan peringatan dapat memanggil stop() untuk meningkatkan peringatan menjadi galat. Ini adalah pola yang umum untuk membuat kode pihak ketiga menjadi lebih ketat.

strict_log <- function(x) {
  withCallingHandlers(
    log(x),
    warning = function(w) {
      stop(paste('Strict mode: warning treated as error:', conditionMessage(w)))
    }
  )
}
tryCatch(strict_log(-1), error = function(e) cat('Error:', e$message, '\n'))
cat('log(4) =', strict_log(4), '\n')

suppressWarnings() dan suppressMessages()

suppressWarnings(expr) mengevaluasi ekspresi sambil menangkap dan membuang semua peringatan secara diam-diam. suppressMessages(expr) melakukan hal yang sama untuk kondisi pesan. Gunakan keduanya secara terbatas — menyembunyikan peringatan dapat menutupi masalah yang sebenarnya.

# Without suppression: warning shown
result1 <- log(-1)
# With suppression: warning hidden
result2 <- suppressWarnings(log(-1))
cat('Both are NaN:', is.nan(result1), is.nan(result2), '\n')

Pemeriksaan Singkat

Pernyataan manakah berikut ini yang benar tentang warning() dibandingkan dengan stop()?

Kondisi: Inti Pembelajaran

Inti pembelajaran tentang kondisi R:

  • stop() = galat = fatal, langsung menghentikan eksekusi; warning() = tidak fatal, eksekusi berlanjut; message() = informatif, dikirim ke stderr
  • Ketiganya membuat objek kondisi dengan hierarki kelas
  • conditionMessage(e) mengekstrak teks dari kondisi apa pun
  • options(warn=1) mencetak peringatan langsung; warn=2 memperlakukannya sebagai galat
  • suppressWarnings() / suppressMessages() membisukan kondisi
  • Utamakan stop() untuk input tidak valid ketika melanjutkan proses akan menghasilkan kesalahan
# Summary of the three condition functions
tryCatch({
  message('Step 1 starting')
  warning('something looks odd')
  stop('cannot continue')
}, message = function(m) cat('MSG:', conditionMessage(m)),
   warning = function(w) cat('WARN:', conditionMessage(w), '\n'),
   error   = function(e) cat('ERR:', conditionMessage(e), '\n'))

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Error, Peringatan, dan Pesan dalam R” gratis?

Ya — teks lengkap “Error, Peringatan, dan Pesan dalam R” 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 “Error, Peringatan, dan Pesan dalam R”?

Pahami tiga jenis sinyal dan kapan masing-masing dipicu. 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 1 dari 4.

Berapa lama pelajaran “Error, Peringatan, dan Pesan dalam R” 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. Error, Peringatan, dan Pesan dalam R
  2. tryCatch() untuk Pemulihan dari Error
  3. withCallingHandlers() dan Restart
  4. Menulis Fungsi Tangguh dengan stop() dan warning()
← Kembali ke R Academy