Uyarılar ve finally
Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 54 / 64.
Uyarı, yürütmeyi durdurmadan bir sorun bildirir: işlev bir değer döndürür ve R, uyarıyı sonunda yazdırır. as.numeric(), sayı olmayan metinler için uyarı verir ve NA döndürür:
x <- as.numeric("abc")
print(x)Çıktı:
[1] NA
Warning message:
NAs introduced by coercion Hatalar gibi, uyarılar da hata akışına gider; bu nedenle Coddy'de bir testi başarısız kılarlar. Sonucu kendin kontrol ettiğinde suppressWarnings() onları susturur ve tryCatch(..., warning = ) bir uyarıyı bir değere dönüştürür:
x <- suppressWarnings(as.numeric("abc"))
print(is.na(x))
r <- tryCatch(as.numeric("abc"), warning = function(w) paste("warned:", conditionMessage(w)))
print(r)Çıktı:
[1] TRUE
[1] "warned: NAs introduced by coercion"warning("message") kendi kodunuzdan bir uyarı oluşturur. Bunun için bir işleyici, hata işleyicisiyle aynı şekilde çalışır:
ratio <- function(a, b) {
if (b == 0) warning("b is zero, returning Inf")
a / b
}
r <- tryCatch(ratio(1, 0), warning = function(w) conditionMessage(w))
print(r)Çıktı:
[1] "b is zero, returning Inf"finally = ..., bir hata oluşmuş olsun ya da olmasın, ifadeden ve varsa işleyiciden sonra çalışır. Kapanış mesajı gibi her zaman gerçekleşmesi gereken işlemler için kullanın:
load <- function(x) {
tryCatch({
if (x < 0) stop("negative")
x * 10
}, error = function(e) NA,
finally = cat("finished", x, "\n"))
}
print(load(2))
print(load(-1))Çıktı:
finished 2
[1] 20
finished -1
[1] NAGörev
Kolayto_numbers(texts) işlevini tamamla. Her metni bir sayıya dönüştür. Dönüştürülemeyen değerler, herhangi bir uyarı yazdırılmadan NA olur. İki satır döndür: boşluklarla birleştirilmiş dönüştürülmüş sayıları ( NA değerleri dahil) içeren Numbers: ve başarısız olan değerlerin sayısını içeren Invalid: .
Sağlanan kod, metinleri virgülle ayrılmış bir satır olarak okur ve döndürülen her satırı yazdırır.
Kendin dene
to_numbers <- function(texts) {
# Kodunuzu buraya yazın
c("Numbers: ", "Invalid: 0")
}
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
cat(to_numbers(strsplit(input[1], ",")[[1]]), 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