Menu
Coddy logo textTech

Vektörleştirilmiş ifelse()

Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 48 / 64.

if bir koşulu test eder. Birkaç değer içeren bir vektör verildiğinde the condition has length > 1 hatasıyla durur. ifelse(test, yes, no) eleman bazında çalışır ve her eleman için bir sonuç döndürür:

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

Çıktı:

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

yes ve no aynı uzunlukta vektörler olabilir, böylece her öğe kendi hesaplanan değerini alabilir:

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

Çıktı:

[1]  40 108  75

İkiden fazla sonuç için ifelse() çağrılarını iç içe yerleştirin. Her öğe için koşullar sırayla denetlenir:

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

Çıktı:

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

ifelse(), her satırın kendi etiketine ihtiyaç duyduğu yeni bir veri çerçevesi sütunu için kullanışlıdır:

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

Çıktı:

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

Görev

Kolay

shipping(weights) işlevini tamamla. Her paketin kargo ücretini , ile birleştirerek döndür: 1 kg'a kadar olan paketlerin ücreti 4, 5 kg'a kadar olanların ücreti 9 ve daha ağır paketlerin ücreti kg başına 2 olsun. Döngü yerine ifelse() kullan.

Sağlanan kod, ağırlıkları virgülle ayrılmış bir satır olarak okur ve döndürülen değeri yazdırır.

Kendin dene

shipping <- function(weights) {
  # Kodunuzu buraya yazın
  ""
}

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
cat(shipping(as.numeric(strsplit(input[1], ",")[[1]])), sep = "\n")
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online R derleyicisi