Funkcja switch()
Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 47 z 64.
switch(x, name = value, ...) porównuje tekst x z nazwami i zwraca wartość tej, która pasuje. Zastępuje długi łańcuch porównań else if dotyczących tej samej zmiennej:
size <- "m"
price <- switch(size, s = 2.5, m = 3, l = 3.5)
print(price)Wynik:
[1] 3Ostatnia wartość bez nazwy jest wartością domyślną i zostaje użyta, gdy nic innego nie pasuje. Bez wartości domyślnej niedopasowane wywołanie switch() zwraca niewidocznie NULL:
day <- "fri"
print(switch(day, sat = "rest", sun = "rest", "work"))
print(is.null(switch("x", a = 1)))Wynik:
[1] "work"
[1] TRUEPusta wartość powoduje przejście do następnej, więc kilka nazw może zwracać ten sam wynik:
kind <- function(day) switch(day, sat = , sun = "weekend", "weekday")
print(kind("sun"))
print(kind("tue"))Wynik:
[1] "weekend"
[1] "weekday"Wartości mogą być całymi blokami kodu ujętymi w nawiasy klamrowe, a wynikiem jest ostatnie wyrażenie w bloku, które zostanie wykonane:
area <- function(shape, a, b = a) {
switch(shape,
square = a^2,
rect = a * b,
circle = {
r <- a / 2
round(pi * r^2, 2)
},
NA)
}
print(area("rect", 3, 4))
print(area("circle", 10))Wynik:
[1] 12
[1] 78.54Wyzwanie
ŁatwyUzupełnij calculate(a, op, b). op jest jednym z: plus, minus, times i over. Zwróć wynik zastosowania tej operacji do a i b albo unknown operation dla każdej innej wartości op. Dzielenie przez zero zwraca cannot divide by zero.
Dostarczony kod odczytuje a, op i b (po jednej wartości w wierszu) i wypisuje zwróconą wartość.
Spróbuj swoich sił
calculate <- function(a, op, b) {
# Napisz tutaj swój kod
"unknown operation"
}
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
cat(calculate(as.numeric(input[1]), input[2], as.numeric(input[3])), 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