Fundamental Series — Part 18 of 20
Error pasti terjadi. Memahami cara membaca pesan error, menangkap error, dan debugging secara sistematis adalah skill yang membedakan pemula dan intermediate.
Membaca Pesan Error
# Error umum
mean("abc")
# Error in mean.default("abc") : argument is not numeric or logical
log(-1)
# Warning: NaNs produced
df$kolom_tidak_ada
# NULL (bukan error — berbahaya!)
CatatanError vs Warning vs Message
- Error — kode berhenti
- Warning — kode jalan, tapi ada masalah
- Message — informasi saja
tryCatch() — Menangkap Error
# Tangkap error, lanjut jalan
result <- tryCatch(
log("abc"),
error = function(e) {
NA # return NA jika error
}
)
result # NA
# Tangkap warning juga
result <- tryCatch(
log(-1),
warning = function(w) {
NA
}
)try() — Versi Sederhana
result <- try(log("abc"), silent = TRUE)
if (inherits(result, "try-error")) {
result <- NA
}stop(), warning(), message()
# Di dalam fungsi sendiri
hitung_bmi <- function(berat, tinggi) {
if (tinggi <= 0) stop("Tinggi harus positif!")
if (berat <= 0) stop("Berat harus positif!")
if (tinggi > 3) warning("Tinggi > 3m — yakin dalam meter?")
berat / tinggi^2
}
hitung_bmi(70, 1.75) # 22.86
hitung_bmi(70, 0) # Error: Tinggi harus positif!
hitung_bmi(70, 175) # Warning + resultDebugging Tools
traceback()
# Setelah error, lihat call stack
f <- function(x) g(x)
g <- function(x) log(x)
f("abc") # Error
traceback()
# 2: g(x) at #1
# 1: f("abc")browser() — Interactive Debugger
my_func <- function(x) {
browser() # pause di sini
y <- x * 2
z <- y + 10
z
}
# Saat berhenti di browser:
# n = next line
# c = continue
# Q = quit
# ls() = lihat variabel lokaldebug() dan undebug()
debug(my_func) # aktifkan debugging
my_func(5) # otomatis masuk browser
undebug(my_func) # matikanDefensive Programming
# Cek input di awal fungsi
analisis <- function(df, kolom) {
stopifnot(is.data.frame(df))
stopifnot(kolom %in% names(df))
stopifnot(is.numeric(df[[kolom]]))
mean(df[[kolom]], na.rm = TRUE)
}Latihan
BahayaLatihan 18.1
# 1. Buat fungsi safe_divide(a, b) yang:
# - Return a/b jika b != 0
# - Return NA dan warning jika b == 0
# 2. Buat fungsi safe_log(x) yang:
# - Return log(x) jika x > 0
# - Return NA jika x <= 0 (pakai tryCatch atau if)
# 3. Apply safe_log ke vector c(10, -5, 0, 100, NA)Ringkasan
| Fungsi | Keterangan |
|---|---|
tryCatch() |
Tangkap error/warning |
try() |
Tangkap error (sederhana) |
stop() |
Raise error |
warning() |
Raise warning |
stopifnot() |
Assert kondisi |
traceback() |
Lihat call stack |
browser() |
Interactive debugger |
debug() |
Auto-debug fungsi |
Sebelumnya: Part 17 — Apply & Vectorisasi Selanjutnya: Part 19 — Reproducible Workflow