tryCatch() ile Yakalama
Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 53 / 64.
tryCatch(expr, error = function(e) ...), expr ifadesini çalıştırır. Bir hata oluşturursa işleyici bunun yerine çalışır ve değeri sonuç olur; betik çalışmaya devam eder:
safe_sqrt <- function(x) {
tryCatch(sqrt(x), error = function(e) NA)
}
print(safe_sqrt(16))
print(safe_sqrt("a"))
print("still running")Çıktı:
[1] 4
[1] NA
[1] "still running"İşleyici hatayı e olarak alır ve conditionMessage(e) onun mesaj metnini döndürür:
result <- tryCatch(
stop("file not found"),
error = function(e) paste("Problem:", conditionMessage(e))
)
print(result)Çıktı:
[1] "Problem: file not found"Yalnızca başarısız olabilecek çağrıyı sarmalayın ve varsayılan bir değer ya da kullanıcıya gösterilecek bir mesaj gibi yararlı bir şey yapabileceğiniz yerde yakalayın:
to_number <- function(s) {
tryCatch({
if (s == "") stop("empty input")
as.integer(s)
}, error = function(e) -1L)
}
print(to_number("42"))
print(to_number(""))Çıktı:
[1] 42
[1] -1Bir döngüde tryCatch(), diğerleri işlenmeye devam ederken hatalı bir öğenin başarısız olmasına izin verir:
inputs <- list(4, "x", 9)
for (v in inputs) {
r <- tryCatch(sqrt(v), error = function(e) "not a number")
cat(format(v), "->", r, "\n")
}Çıktı:
4 -> 2
x -> not a number
9 -> 3 Görev
Kolaysafe_divide(a, b) işlevini tamamla. tryCatch() kullan: içinde, b 0 olduğunda division by zero hatasını oluştur ve aksi takdirde a / b işlemini hesapla. İşleyici, Error: ifadesinin ardından mesajı döndürür. Sonucu metin olarak iki ondalık basamağa yuvarlanmış şekilde (3.33) veya hata metni olarak döndür.
Sağlanan kod, virgüllerle ayrılmış 10/3 gibi sayı çiftlerini okur ve her çiftin sonucunu kendi satırına yazdırır.
Kendin dene
safe_divide <- function(a, b) {
# Kodunuzu buraya yazın
""
}
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
for (pair in strsplit(input[1], ",")[[1]]) {
p <- as.numeric(strsplit(pair, "/")[[1]])
cat(safe_divide(p[1], p[2]), "\n", sep = "")
}
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