Memeriksa Kunci
Termasuk bagian Logika dan Alur dalam perjalanan R di Coddy. Pelajaran 8 dari 64.
Sebelum mencari key yang mungkin tidak ada, periksa dengan %in% apakah key tersebut ada di antara namanya:
stock <- c(apples = 12, pears = 0)
print("pears" %in% names(stock))
print("plums" %in% names(stock))Output:
[1] TRUE
[1] FALSEif di sekitar pencarian memberikan nilai default untuk kunci yang tidak ditemukan, alih-alih menghasilkan NA atau error:
stock <- c(apples = 12, pears = 0)
item <- "plums"
qty <- if (item %in% names(stock)) stock[[item]] else 0
print(qty)Output:
[1] 0Kunci yang ada dengan nilai 0 berbeda dari kunci yang tidak ditemukan: pears diketahui dan out of stock, plums sama sekali tidak dijual.
list menggunakan pemeriksaan %in% names() yang sama. Nama yang tidak ada dalam list akan menghasilkan NULL, bukan error, jadi is.null() juga bisa digunakan:
user <- list(name = "Ada", city = "London")
print(is.null(user[["email"]]))
print("city" %in% names(user))Output:
[1] TRUE
[1] TRUEFungsi pembantu kecil menjaga pemeriksaan tetap di satu tempat saat program mencari banyak kunci:
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))Output:
[1] 12
[1] 0Tantangan
MudahLengkapi stock_status(stock, item). Kembalikan unknown jika item bukan kunci dari stock, out of stock jika nilainya 0, dan selain itu in stock: diikuti jumlahnya.
Kode yang disediakan membaca stok sebagai pasangan name=quantity yang dipisahkan koma, lalu membaca item, dan mencetak nilai yang dikembalikan.
Coba sendiri
stock_status <- function(stock, item) {
# Tulis kodemu di sini
""
}
# Kode input/output yang disediakan: biarkan apa adanya
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")
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami string
Substring dengan substr()Memformat dengan sprintf()Memisahkan dan MenggabungkanMencari stringMengganti TeksRangkuman: Pembuat Nama Pengguna4Matriks
Membuat MatriksMengakses Elemen MatriksRingkasan Baris dan KolomAritmetika MatriksRangkuman: Denah Tempat Duduk2Pencarian Nilai-Kunci
Pencarian pada Vector BernamaMemeriksa KunciMenambahkan dan Menghapus KunciMenelusuri NamaUlasan: Meja Saham5Proyek, Buku Nilai
Menambahkan SiswaMencatat Nilai3Set dan Penghitungan
Nilai UnikOperasi setPengujian KeanggotaanMenghitung dengan table()Ulasan: Tamu Acara6Fungsi sebagai Nilai
Fungsi AnonimMengirim FungsiMengembalikan FungsiClosure dengan StateRangkuman: Aturan Diskon9Data Frame
Membuat Data FrameKolom dan BarisMemfilter BarisMenambahkan dan MengurutkanRangkuman: Laporan Penjualan12Proyek: Pelacak Pengeluaran
Mencatat PengeluaranTotal PengeluaranLatihan sendiri: Compiler R online