Fundamental Series — Part 5 of 20
Conditional memungkinkan kode mengambil keputusan — menjalankan blok kode berbeda tergantung kondisi. Part ini membahas if/else, ifelse(), dan case_when().
if / else — Untuk Satu Nilai
x <- 15
if (x > 10) {
"lebih dari 10"
} else {
"10 atau kurang"
}
# "lebih dari 10"if / else if / else
nilai <- 75
if (nilai >= 85) {
grade <- "A"
} else if (nilai >= 70) {
grade <- "B"
} else if (nilai >= 55) {
grade <- "C"
} else {
grade <- "D"
}
grade # "B"
Peringatanif/else Hanya untuk SATU Nilai
if/else di R hanya mengecek satu kondisi (skalar). Untuk vektor, gunakan ifelse() atau case_when().
x <- c(5, 15, 25)
if (x > 10) { ... } # Warning! Hanya elemen pertama yang dicekifelse() — Untuk Vektor
ifelse(kondisi, nilai_jika_true, nilai_jika_false) bekerja elemen per elemen:
x <- c(5, 15, 25, 8, 30)
ifelse(x > 10, "besar", "kecil")
# "kecil" "besar" "besar" "kecil" "besar"Nested ifelse
nilai <- c(90, 72, 55, 40, 85)
ifelse(nilai >= 85, "A",
ifelse(nilai >= 70, "B",
ifelse(nilai >= 55, "C", "D")))
# "A" "B" "C" "D" "A"
TipNested ifelse Sulit Dibaca
Untuk kondisi > 2, gunakan case_when() dari dplyr — jauh lebih bersih.
case_when() — Conditional Elegan (dplyr)
library(dplyr)
nilai <- c(90, 72, 55, 40, 85)
case_when(
nilai >= 85 ~ "A",
nilai >= 70 ~ "B",
nilai >= 55 ~ "C",
TRUE ~ "D" # default (else)
)
# "A" "B" "C" "D" "A"Dalam Data Frame
library(dplyr)
data(mtcars)
mtcars |>
mutate(
efisiensi = case_when(
mpg >= 25 ~ "irit",
mpg >= 15 ~ "sedang",
TRUE ~ "boros"
)
) |>
head()switch() — Untuk Nilai Diskrit
hari <- "Senin"
switch(hari,
"Senin" = "Kerja",
"Selasa" = "Kerja",
"Sabtu" = "Libur",
"Minggu" = "Libur",
"Kerja" # default
)
# "Kerja"switch() berguna ketika kamu mencocokkan nilai eksak (bukan range).
Latihan
BahayaLatihan 5.1 — if/else
# Buat fungsi sederhana:
# Input: suhu (satu angka)
# Output: "dingin" (<20), "normal" (20-30), "panas" (>30)
suhu <- 28
# Tulis if/else if/else untuk menentukan kategori
BahayaLatihan 5.2 — ifelse pada vektor
pendapatan <- c(2.5, 8.0, 3.2, 15.0, 4.1, 1.8)
# 1. Buat vektor "miskin"/"kaya" dengan threshold 5 juta
# 2. Buat vektor "rendah"/"sedang"/"tinggi" dengan nested ifelse:
# < 3 = rendah, 3-10 = sedang, > 10 = tinggi
BahayaLatihan 5.3 — case_when
library(dplyr)
data(mtcars)
# Buat kolom baru "ukuran_mesin":
# cyl == 4 → "kecil"
# cyl == 6 → "sedang"
# cyl == 8 → "besar"
# Hitung frekuensi masing-masing kategori dengan table()Ringkasan
| Fungsi | Untuk | Contoh |
|---|---|---|
if/else |
Satu nilai (skalar) | if (x > 0) "positif" |
ifelse() |
Vektor | ifelse(x > 0, "pos", "neg") |
case_when() |
Vektor, banyak kondisi | case_when(x > 10 ~ "A", ...) |
switch() |
Nilai diskrit eksak | switch(x, "a" = 1, "b" = 2) |
Sebelumnya: Part 4 — Operator & Ekspresi Selanjutnya: Part 6 — Kontrol Alur: Loop