Girdiyi Doğrulama
Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 55 / 64.
Kullanıcılardan veya dosyalardan alınan girdi metindir ve herhangi bir şey olabilir. Kullanmadan önce kontrol edin: suppressWarnings(as.numeric(s)), sayı olmayan metinler için NA verir ve is.na() bunun için test yapar:
read_age <- function(s) {
n <- suppressWarnings(as.numeric(s))
if (is.na(n)) return("not a number")
if (n < 0 || n > 130) return("out of range")
paste("age", n)
}
print(read_age("36"))
print(read_age("abc"))
print(read_age("200"))Çıktı:
[1] "age 36"
[1] "not a number"
[1] "out of range"Bir doğrulayıcı, ilk sorunda durmak yerine her sorunu toplayabilir; bu da daha yararlı geri bildirim sağlar. Burada doğrulayıcı, girdi uygun olduğunda boş olan bir ileti vektörü döndürür:
check_password <- function(p) {
problems <- c()
if (nchar(p) < 8) problems <- c(problems, "too short")
if (!grepl("[0-9]", p)) problems <- c(problems, "needs a digit")
problems
}
print(check_password("abc"))
print(length(check_password("secret123")))Çıktı:
[1] "too short" "needs a digit"
[1] 0Stili, işlevi kimin çağırdığına göre seçin: çağıran hatalı girdiyi bekliyor ve bunu kullanıcıya gösteriyorsa bir ileti döndürün; hatalı girdi gözden kaçmaması gereken bir hataya işaret ediyorsa stop() ile hata oluşturun.
# çağıran taraf hatalı girdi bekler ve mesajı gösterir
read_age("abc") # "not a number"
# hatalı girdi programdaki bir hatadır
if (!is.numeric(x)) stop("x must be numeric")Ayıklama adımının etrafında tryCatch() ile doğrulama yapmak, ana kodu denetimlerden uzak tutar: her kayıt ya dönüştürülür ya da bildirilir:
parse_record <- function(line) {
parts <- strsplit(line, ",")[[1]]
if (length(parts) != 2) stop("expected 2 fields")
qty <- suppressWarnings(as.integer(parts[2]))
if (is.na(qty)) stop("quantity is not a whole number")
list(item = parts[1], qty = qty)
}
for (line in c("tea,2", "jam", "oil,x")) {
r <- tryCatch(parse_record(line), error = function(e) conditionMessage(e))
cat(line, ":", if (is.list(r)) paste("ok", r$qty) else r, "\n")
}Çıktı:
tea,2 : ok 2
jam : expected 2 fields
oil,x : quantity is not a whole number Görev
Kolaycheck_signup(name, age, email) işlevini tamamlayın. Her problemi şu sırayla toplayın: name is empty (başındaki ve sonundaki boşluklar kaldırıldıktan sonra), age must be a number, age must be 13 or older (yalnızca yaş bir sayı olduğunda) ve email needs @. Hiç problem olmadığında ok döndürün; aksi takdirde problemleri ; ile birleştirerek döndürün.
Sağlanan kod, adı, yaşı ve e-postayı (her satırda bir tane olacak şekilde) okur ve döndürülen değeri yazdırır.
Kendin dene
check_signup <- function(name, age, email) {
# Kodunuzu buraya yazın
"ok"
}
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
cat(check_signup(input[1], input[2], input[3]), 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