stop() ile Hata Oluşturma
Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 52 / 64.
stop("message") bir hata oluşturur: işlev hemen durur, sonrasındaki hiçbir şey çalışmaz ve R mesajı yazdırır. Bir işlev çalışamayacağı bir girdi aldığında kullanın:
check_qty <- function(q) {
if (q <= 0) stop("quantity must be positive")
q
}
print(check_qty(3))
print(check_qty(-1))
print("never printed")Çıktı:
[1] 3
Error in check_qty(-1) : quantity must be positive
Calls: print -> check_qty
Execution haltedHata metni başarısız olan çağrıyı adlandırır ve Execution halted tüm betiğin durduğu anlamına gelir: son print() hiç çalışmadı. Bir hata, normal çıktıya değil hata akışına yazılır; bu nedenle Coddy'de herhangi bir hata veya uyarı yazdırıldığında test başarısız olur.
stopifnot() aynı anda birkaç koşulu denetler ve FALSE olan ilk koşul için bir hata oluşturur. Adlandırılmış bir koşul, adını ileti olarak kullanır:
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))Çıktı:
[1] 6
Error in area(2, -1) : height must be positive
Calls: print -> area -> stopifnot
Execution haltedMesajı paste0() veya sprintf() ile değerlerden oluşturun; böylece okuyucu neyin yanlış olduğunu görür:
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))Çıktı:
Error in get_item(c("a", "b"), 5) : index 5 is past the end (2 items)
Calls: print -> get_item
Execution haltedHataları bir iş yapılmadan önce, fonksiyonun başında yükseltin. Erken durduran kontroller, geçerli girdiyi varsayabildiği için fonksiyonun geri kalanını basit tutar:
withdraw <- function(balance, amount) {
if (amount <= 0) stop("amount must be positive")
if (amount > balance) stop("insufficient funds")
balance - amount
}Görev
Kolaymake_order(item, qty, stock) işlevini tamamla. stop() ile hata oluştur:
qty1'in altındaysaquantity must be at least 1qtystockdeğerinden büyükse, örneğinonly 3 leftolacak şekildeonly <stock> left
Aksi takdirde ordered <qty> x <item> döndür.
Sağlanan kod öğeyi, miktarı ve stok değerini okur, işlevini çağırır ve sonucu veya hata mesajının ardından Error: ifadesini yazdırır; bu nedenle hiçbir testte R'nin kendi hata metni gösterilmez.
Kendin dene
make_order <- function(item, qty, stock) {
# Kodunuzu buraya yazın
""
}
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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")
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Dizeleri Derinlemesine
substr() ile Alt Dizelersprintf() ile BiçimlendirmeBölme ve BirleştirmeDizelerde AramaMetin DeğiştirmeTekrar - Kullanıcı Adı Oluşturucu4Matrisler
Matris OluşturmaMatrisleri İndekslemeSatır ve Sütun ÖzetleriMatris AritmetiğiTekrar - Oturma Planı2Anahtar-Değer Aramaları
Adlandırılmış Vektör AramalarıAnahtarları DenetlemeAnahtar Ekleme ve KaldırmaAdlar Üzerinde DöngüTekrar - Hisse Senedi Masası5Proje - Not Defteri
Öğrenci EklemeNotları Kaydetme8Sıralama ve Gruplama
Vektörleri SıralamaAnahtara Göre Sıralamasplit() ile GruplamaGrup ÖzetleriTekrar - Liderlik Tablosu11Hataları Yönetme
stop() ile Hata OluşturmatryCatch() ile YakalamaUyarılar ve finallyGirdiyi DoğrulamaTekrar - Güvenli Hesap Makinesi3Kümeler ve Sayma
Benzersiz DeğerlerKüme İşlemleriÜyelik Testleritable() ile SaymaTekrar - Etkinlik Konukları6Değer Olarak Fonksiyonlar
Anonim FonksiyonlarFonksiyonları GeçirmeFonksiyon DöndürmeDurum Bilgili Closure'larTekrar - İndirim Kuralları9Veri Çerçeveleri
Veri Çerçeveleri OluşturmaSütunlar ve SatırlarSatırları FiltrelemeEkleme ve SıralamaTekrar - Satış Raporu12Proje - Harcama Takipçisi
Harcamaları KaydetmeToplam HarcamaKendi başına pratik yap: Online R derleyicisi