Menu
Coddy logo textTech

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] 3

Ostatnia 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] TRUE

Pusta 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.54
challenge icon

Wyzwanie

Łatwy

Uzupeł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")
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator R online