Sprawdzanie kluczy
Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 8 z 64.
Zanim wyszukasz klucz, którego może brakować, sprawdź go za pomocą %in% wśród nazw:
stock <- c(apples = 12, pears = 0)
print("pears" %in% names(stock))
print("plums" %in% names(stock))Wynik:
[1] TRUE
[1] FALSEWarunek if wokół wyszukiwania zapewnia domyślną wartość dla brakującego klucza zamiast NA lub błędu:
stock <- c(apples = 12, pears = 0)
item <- "plums"
qty <- if (item %in% names(stock)) stock[[item]] else 0
print(qty)Wynik:
[1] 0Klucz, który istnieje i ma wartość 0, różni się od brakującego klucza: pears jest znany i out of stock, plums w ogóle nie jest sprzedawany.
Listy używają tego samego sprawdzenia %in% names(). Brakująca nazwa na liście zwraca NULL, a nie błąd, więc działa również is.null():
user <- list(name = "Ada", city = "London")
print(is.null(user[["email"]]))
print("city" %in% names(user))Wynik:
[1] TRUE
[1] TRUEMała funkcja pomocnicza pozwala sprawdzać wszystko w jednym miejscu, gdy program wyszukuje wiele kluczy:
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))Wynik:
[1] 12
[1] 0Wyzwanie
ŁatwyUzupełnij stock_status(stock, item). Zwróć unknown, jeśli item nie jest kluczem w stock, out of stock, jeśli jego wartość wynosi 0, a w przeciwnym razie in stock: , po którym następuje ilość.
Podany kod odczytuje stan magazynowy jako pary name=quantity oddzielone przecinkami, a następnie nazwę przedmiotu i wypisuje zwróconą wartość.
Spróbuj swoich sił
stock_status <- function(stock, item) {
# Wpisz tutaj swój kod
""
}
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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")
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Łańcuchy znaków w szczegółach
Podciągi za pomocą substr()Formatowanie za pomocą sprintf()Dzielenie i łączenieWyszukiwanie w łańcuchach znakówZastępowanie tekstuPowtórka – kreator nazwy użytkownika4Macierze
Tworzenie macierzyIndeksowanie macierzyPodsumowania wierszy i kolumnDziałania na macierzachPowtórka – plan miejsc10Zaawansowane sterowanie przepływem
Funkcja switch()Wektorowe ifelse()repeat i breakFunkcje rekurencyjnePodsumowanie — klasyfikator ocen2Wyszukiwanie wartości po kluczach
Wyszukiwanie nazwanych elementów wektoraSprawdzanie kluczyDodawanie i usuwanie kluczyIterowanie po nazwachPowtórzenie — giełda5Projekt — dziennik ocen
Dodawanie uczniówZapisywanie ocen3Zbiory i zliczanie
Unikalne wartościOperacje na zbiorachTesty przynależnościZliczanie za pomocą table()Podsumowanie — goście wydarzenia6Funkcje jako wartości
Funkcje anonimowePrzekazywanie funkcjiZwracanie funkcjiDomknięcia ze stanemPowtórka — reguły rabatowe9Ramki danych
Tworzenie ramek danychKolumny i wierszeFiltrowanie wierszyDodawanie i sortowaniePodsumowanie – raport sprzedaży12Projekt – śledzenie wydatków
Rejestrowanie wydatkówŁączne wydatkiPoćwicz samodzielnie: Kompilator R online