Memunculkan error dengan stop()
Termasuk bagian Logika dan Alur dalam perjalanan R di Coddy. Pelajaran 52 dari 64.
stop("message") memunculkan error: fungsi langsung berhenti, tidak ada kode setelahnya yang dijalankan, dan R mencetak pesan tersebut. Gunakan fungsi ini saat sebuah fungsi menerima input yang tidak dapat digunakan:
check_qty <- function(q) {
if (q <= 0) stop("quantity must be positive")
q
}
print(check_qty(3))
print(check_qty(-1))
print("never printed")Output:
[1] 3
Error in check_qty(-1) : quantity must be positive
Calls: print -> check_qty
Execution haltedTeks error menyebut pemanggilan yang gagal, dan Execution halted berarti seluruh skrip berhenti: print() terakhir tidak pernah dijalankan. Error ditulis ke aliran error, bukan ke output normal, jadi di Coddy sebuah tes gagal ketika error atau peringatan apa pun dicetak.
stopifnot() memeriksa beberapa kondisi sekaligus dan memunculkan error untuk kondisi pertama yang bernilai FALSE. Kondisi bernama menggunakan namanya sebagai pesan:
area <- function(w, h) {
stopifnot("width must be positive" = w > 0, "height must be positive" = h > 0)
w * h
}
print(area(2, 3))
print(area(2, -1))Output:
[1] 6
Error in area(2, -1) : height must be positive
Calls: print -> area -> stopifnot
Execution haltedSusun pesan dari nilai-nilai dengan paste0() atau sprintf(), agar pembaca tahu apa yang salah:
get_item <- function(items, i) {
if (i > length(items)) stop(sprintf("index %d is past the end (%d items)", i, length(items)))
items[i]
}
print(get_item(c("a", "b"), 5))Output:
Error in get_item(c("a", "b"), 5) : index 5 is past the end (2 items)
Calls: print -> get_item
Execution haltedTimbulkan error di awal fungsi, sebelum pekerjaan apa pun dilakukan. Pemeriksaan yang berhenti lebih awal membuat bagian fungsi lainnya tetap sederhana, karena bagian tersebut dapat mengasumsikan bahwa input valid:
withdraw <- function(balance, amount) {
if (amount <= 0) stop("amount must be positive")
if (amount > balance) stop("insufficient funds")
balance - amount
}Tantangan
MudahLengkapi make_order(item, qty, stock). Picu error dengan stop():
quantity must be at least 1jikaqtykurang dari 1only <stock> leftjikaqtylebih besar daristock, sepertionly 3 left
Jika tidak, kembalikan ordered <qty> x <item>.
Kode yang disediakan membaca item, jumlah, dan stok, memanggil fungsimu, lalu mencetak hasilnya atau Error: diikuti pesan error, jadi kasus uji tidak pernah menampilkan teks error bawaan R.
Coba sendiri
make_order <- function(item, qty, stock) {
# Tulis kodemu di sini
""
}
# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
result <- tryCatch(make_order(input[1], as.numeric(input[2]), as.numeric(input[3])),
error = function(e) paste("Error:", conditionMessage(e)))
cat(result, sep = "\n")
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami string
Substring dengan substr()Memformat dengan sprintf()Memisahkan dan MenggabungkanMencari stringMengganti TeksRangkuman: Pembuat Nama Pengguna4Matriks
Membuat MatriksMengakses Elemen MatriksRingkasan Baris dan KolomAritmetika MatriksRangkuman: Denah Tempat Duduk2Pencarian Nilai-Kunci
Pencarian pada Vector BernamaMemeriksa KunciMenambahkan dan Menghapus KunciMenelusuri NamaUlasan: Meja Saham5Proyek, Buku Nilai
Menambahkan SiswaMencatat Nilai8Pengurutan dan Pengelompokan
Mengurutkan VektorMengurutkan berdasarkan KunciMengelompokkan dengan split()Ringkasan KelompokUlasan: Papan Peringkat11Penanganan error
Memunculkan error dengan stop()Menangani error dengan tryCatch()Peringatan dan finallyMemvalidasi inputRangkuman: Kalkulator Aman3Set dan Penghitungan
Nilai UnikOperasi setPengujian KeanggotaanMenghitung dengan table()Ulasan: Tamu Acara6Fungsi sebagai Nilai
Fungsi AnonimMengirim FungsiMengembalikan FungsiClosure dengan StateRangkuman: Aturan Diskon9Data Frame
Membuat Data FrameKolom dan BarisMemfilter BarisMenambahkan dan MengurutkanRangkuman: Laporan Penjualan12Proyek: Pelacak Pengeluaran
Mencatat PengeluaranTotal PengeluaranLatihan sendiri: Compiler R online