Menu
Coddy logo textTech

Wektorowe ifelse()

Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 48 z 64.

if sprawdza jeden warunek. Gdy otrzyma wektor zawierający kilka wartości, kończy działanie z błędem the condition has length > 1. ifelse(test, yes, no) działa na każdym elemencie osobno i zwraca jeden wynik dla każdego elementu:

temps <- c(12, 25, 31, 18)
print(ifelse(temps > 20, "warm", "cool"))

Wynik:

[1] "cool" "warm" "warm" "cool"

yes i no mogą być wektorami o tej samej długości, więc każdy element może otrzymać własną obliczoną wartość:

price <- c(40, 120, 75)
final <- ifelse(price > 100, price * 0.9, price)
print(final)

Wynik:

[1]  40 108  75

Zagnieżdżaj wywołania ifelse(), aby uzyskać więcej niż dwa wyniki. Warunki są sprawdzane po kolei dla każdego elementu:

scores <- c(95, 72, 48, 81)
grade <- ifelse(scores >= 90, "A", ifelse(scores >= 70, "B", "C"))
print(grade)

Wynik:

[1] "A" "B" "C" "B"

ifelse() jest przydatne w przypadku nowej kolumny ramki danych, gdy każdy wiersz potrzebuje własnej etykiety:

df <- data.frame(item = c("tea", "oil"), stock = c(0, 8))
df$status <- ifelse(df$stock == 0, "sold out", "available")
print(df)

Wynik:

  item stock    status
1  tea     0  sold out
2  oil     8 available
challenge icon

Wyzwanie

Łatwy

Uzupełnij shipping(weights). Zwróć koszt wysyłki każdej paczki, połączony za pomocą , : paczki o wadze do 1 kg kosztują 4, do 5 kg kosztują 9, a cięższe paczki kosztują 2 za kg. Użyj ifelse(), a nie pętli.

Dostarczony kod odczytuje wagi z wiersza rozdzielonego przecinkami i wyświetla zwróconą wartość.

Spróbuj swoich sił

shipping <- function(weights) {
  # Wpisz tutaj swój kod
  ""
}

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
cat(shipping(as.numeric(strsplit(input[1], ",")[[1]])), 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