Anahtarları Denetleme
Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 8 / 64.
Eksik olabilecek bir anahtarı aramadan önce, adlara karşı %in% ile kontrol edin:
stock <- c(apples = 12, pears = 0)
print("pears" %in% names(stock))
print("plums" %in% names(stock))Çıktı:
[1] TRUE
[1] FALSEArama işleminin etrafına yerleştirilen bir if, eksik bir anahtar için NA veya hata yerine varsayılan bir değer verir:
stock <- c(apples = 12, pears = 0)
item <- "plums"
qty <- if (item %in% names(stock)) stock[[item]] else 0
print(qty)Çıktı:
[1] 0Değeri 0 olan bir anahtar, eksik bir anahtardan farklıdır: pears bilinir ve out of stock, plums ise hiç satılmaz.
Listelerde de aynı %in% names() kontrolü kullanılır. Bir listede bulunmayan bir ad hata yerine NULL döndürür, bu nedenle is.null() da işe yarar:
user <- list(name = "Ada", city = "London")
print(is.null(user[["email"]]))
print("city" %in% names(user))Çıktı:
[1] TRUE
[1] TRUEKüçük bir yardımcı işlev, bir program birçok anahtarı ararken kontrolü tek bir yerde tutar:
get_or <- function(x, key, default) {
if (key %in% names(x)) x[[key]] else default
}
stock <- c(apples = 12)
print(get_or(stock, "apples", 0))
print(get_or(stock, "kiwis", 0))Çıktı:
[1] 12
[1] 0Görev
Kolaystock_status(stock, item) işlevini tamamlayın. item, stock sözlüğünde bir anahtar değilse unknown, değeri 0 ise out of stock, aksi hâlde in stock: ifadesinin ardından miktarı döndürün.
Verilen kod, stok miktarlarını virgülle ayrılmış name=quantity çiftleri olarak, ardından öğeyi okur ve döndürülen değeri yazdırır.
Kendin dene
stock_status <- function(stock, item) {
# Kodunuzu buraya yazın
""
}
# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
stock <- c()
for (pair in strsplit(input[1], ",")[[1]]) {
kv <- strsplit(pair, "=")[[1]]
stock[kv[1]] <- as.numeric(kv[2])
}
cat(stock_status(stock, input[2]), 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ı Kaydetme3Kü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