Fundamental Series — Part 6 of 20
Loop menjalankan blok kode berulang kali. Di R, loop ada tempatnya, tapi sering kali vektorisasi lebih baik.
for Loop
for (i in 1:5) {
cat("Iterasi:", i, "\n")
}Loop Over Vektor
kota <- c("Jakarta", "Bandung", "Surabaya")
for (k in kota) {
cat("Kota:", k, "\n")
}Simpan Hasil Loop
x <- c(4, 9, 16, 25)
hasil <- numeric(length(x)) # pra-alokasi vektor kosong
for (i in seq_along(x)) {
hasil[i] <- sqrt(x[i])
}
hasil # 2 3 4 5
TipPra-alokasi!
Selalu buat vektor kosong sebelum loop (numeric(), character(), vector()). Menambah elemen satu per satu dengan c() di dalam loop sangat lambat di R.
while Loop
x <- 1
while (x <= 5) {
cat(x, "")
x <- x + 1
}
# 1 2 3 4 5
PeringatanHati-hati Infinite Loop!
Jika kondisi while tidak pernah FALSE, loop berjalan selamanya. Tekan Esc (RStudio) atau Ctrl+C untuk menghentikan.
break dan next
# break — hentikan loop
for (i in 1:10) {
if (i == 5) break
cat(i, "")
}
# 1 2 3 4
# next — lewati iterasi saat ini
for (i in 1:10) {
if (i %% 2 == 0) next # lewati genap
cat(i, "")
}
# 1 3 5 7 9Loop vs Vektorisasi
Di R, vektorisasi hampir selalu lebih cepat dan bersih:
x <- 1:1000000
# ❌ Loop — lambat
hasil <- numeric(length(x))
for (i in seq_along(x)) {
hasil[i] <- x[i]^2
}
# ✅ Vektorisasi — cepat & ringkas
hasil <- x^2Kapan Pakai Loop?
- Iterasi memiliki dependensi (hasil iterasi ke-i bergantung pada iterasi ke-(i-1))
- Operasi side effects (baca/tulis file, print, plot)
- Logika yang terlalu kompleks untuk divektorisasi
Loop Over Data Frame
data(mtcars)
# Loop per kolom
for (col in names(mtcars)) {
if (is.numeric(mtcars[[col]])) {
cat(col, ": mean =", mean(mtcars[[col]]), "\n")
}
}Latihan
BahayaLatihan 6.1 — For Loop
# 1. Cetak bilangan 1-20 yang habis dibagi 3
# 2. Hitung jumlah (sum) bilangan 1-100 menggunakan loop
# Verifikasi dengan sum(1:100)
BahayaLatihan 6.2 — While Loop
# Simulasi: mulai dengan saldo = 1000
# Setiap iterasi, saldo dikali faktor random antara 0.8 dan 1.2
# Hentikan ketika saldo < 500 atau > 2000
# Berapa iterasi yang diperlukan?
set.seed(42)
saldo <- 1000
iterasi <- 0
# ... tulis while loop
BahayaLatihan 6.3 — Loop vs Vektorisasi
# Diberikan vektor:
x <- rnorm(10000)
# 1. Hitung mean(x) menggunakan for loop
# 2. Bandingkan hasilnya dengan mean(x) bawaan
# 3. Bandingkan kecepatan: system.time({ ... })Ringkasan
| Konsep | Sintaks | Keterangan |
|---|---|---|
for |
for (i in 1:n) { } |
Loop dengan counter/vektor |
while |
while (cond) { } |
Loop sampai kondisi FALSE |
break |
break |
Hentikan loop |
next |
next |
Lewati iterasi saat ini |
| Vektorisasi | x^2 |
Lebih cepat & idiomatic R |
| Pra-alokasi | numeric(n) |
Buat vektor kosong sebelum loop |
Sebelumnya: Part 5 — Conditional Selanjutnya: Part 7 — Fungsi