Looping di R
beberapa contoh looping yang menarik
Looping di R
beberapa contoh looping yang menarik
Assalamu’alaikum teman data.. berikut beberapa contoh penggunaan looping di R yang bisa untuk menambah wawasan aplikasi penggunaannya
“Kita punya data harian suhu kota Yogyakarta selama sepekan, dan kita ingin tahu berapa kali suhu naik dibanding hari sebelumnya.”
temp <- c(30, 31, 31, 32, 33, 31, 29, 30)
naik <- 0
for (i in 2:length(temp)) {
if (temp[i] > temp[i-1]) {
naik <- naik + 1
}
}
naik
bagaimana hasilnya?
Visualisasi Dinamis
Gunakan paket seperti ggplot2 atau animation untuk menunjukkan bagaimana loop membentuk hasil dari waktu ke waktu.
Misalnya, “loop menggambar titik-titik yang makin lama membentuk pola”.
library(ggplot2)
x <- c()
y <- c()
for (i in 1:30) {
x <- c(x, i)
y <- c(y, sin(i/3))
plot(x, y, type="b", main=paste("Iterasi ke-", i))
Sys.sleep(0.1)
}
Membentuk gelombang sinus
x <- seq(0, 2*pi, length.out = 100)
for (i in 1:50) {
y <- sin(x + i/5)
plot(x, y, type = "l", col = "blue", lwd = 2,
ylim = c(-1, 1), main = paste("Fase ke-", i))
Sys.sleep(0.1)
}
serta contoh berikut,
library(ggplot2)
df <- data.frame(x = numeric(), y = numeric())
for (i in 1:50) {
df <- rbind(df, data.frame(x = i, y = sin(i/3)))
print(
ggplot(df, aes(x, y)) +
geom_line(color = "steelblue", linewidth = 1.2) +
geom_point(color = "red", size = 3) +
labs(title = paste("Iterasi ke-", i)) +
theme_minimal()
)
Sys.sleep(0.1)
}
pola visual yang menarik
plot(0, 0, type="n", xlim=c(-10,10), ylim=c(-10,10), asp=1)
for (i in 1:100) {
points(cos(i)*i/10, sin(i)*i/10, col=i, pch=19)
Sys.sleep(0.05)
}
akan memberikan hasil seperti berikut,

Belajar loop, sampling acak, dan statistik deskriptif (rata-rata) bisa jadi pintu masuk ke topik Central Limit Theorem (CLT) atau sampling distribution sebagai visualisasi teorinya
Contoh: Simulasi Sampling Rata-Rata dengan Loop
Tujuan
- Buat dataset berisi 100 angka acak dari distribusi tertentu (misal uniform).
- Ambil sampel acak sebanyak 20 angka dari dataset tersebut.
- Hitung rata-ratanya.
- Ulangi proses itu sebanyak 100 kali.
- Lihat distribusi rata-rata hasil sampling dalam bentuk histogram.
set.seed(123) # untuk hasil acak yang konsisten
# 1️⃣ Buat dataset berisi 100 angka acak dari distribusi uniform (0-100)
data_asli <- runif(100, min = 0, max = 100)
# 2️⃣ Siapkan vektor kosong untuk menampung hasil rata-rata
hasil_rata <- c()
# 3️⃣ Looping sebanyak 100 kali
for (i in 1:100) {
sampel <- sample(data_asli, size = 20, replace = TRUE)
rata <- mean(sampel)
hasil_rata <- c(hasil_rata, rata)
}
# 4️⃣ Tampilkan 10 hasil pertama
head(hasil_rata, 10)
# 5️⃣ Visualisasi distribusi hasil rata-rata
hist(hasil_rata, breaks = 10,
col = "skyblue", border = "white",
main = "Distribusi Rata-rata dari 100 Kali Sampling",
xlab = "Nilai Rata-rata Sampel", ylab = "Frekuensi")
Interpretasi hasil untuk pemahaman
- Data awal (100 angka acak) adalah populasi.
- Setiap loop adalah pengambilan sampel acak dari populasi.
- Nilai
mean(sampel)mewakili rata-rata sampel. - Setelah 100 kali pengambilan, kita dapatkan distribusi rata-rata sampel.
- Histogram menunjukkan bahwa rata-rata sampel cenderung mendekati rata-rata populasi — cikal bakal pemahaman tentang Central Limit Theorem.
dapat juga ditambahkan dengan menggunakan library ggplot2
library(ggplot2)
set.seed(123)
data_asli <- runif(100, min = 0, max = 100)
hasil_rata <- c()
for (i in 1:100) {
sampel <- sample(data_asli, size = 20, replace = TRUE)
hasil_rata <- c(hasil_rata, mean(sampel))
}
df <- data.frame(rata = hasil_rata)
ggplot(df, aes(x = rata)) +
geom_histogram(binwidth = 2, fill = "steelblue", color = "white", alpha = 0.8) +
labs(
title = "Distribusi Rata-rata dari 100 Kali Sampling",
subtitle = "Setiap sampel terdiri dari 20 angka acak dari 100 data awal",
x = "Nilai Rata-rata Sampel", y = "Frekuensi"
) +
theme_minimal(base_size = 13)
untuk visual yang lebih menarik dapat digunakan sys.sleep()
set.seed(123) # agar hasil acak tetap sama setiap dijalankan
# 1️⃣ Buat dataset berisi 100 angka acak dari 0–100
data_asli <- runif(100, min = 0, max = 100)
# 2️⃣ Siapkan vektor kosong untuk menampung hasil rata-rata
hasil_rata <- c()
# 3️⃣ Loop sebanyak 100 kali
for (i in 1:100) {
# ambil 20 sampel acak dari data
sampel <- sample(data_asli, size = 20, replace = TRUE)
# hitung rata-rata
rata <- mean(sampel)
# simpan ke vektor hasil
hasil_rata <- c(hasil_rata, rata)
# 4️⃣ Plot histogram yang diperbarui setiap iterasi
hist(hasil_rata,
breaks = 10,
col = "skyblue", border = "white",
main = paste("Distribusi Rata-rata (Iterasi ke-", i, ")"),
xlab = "Nilai Rata-rata Sampel",
ylab = "Frekuensi",
xlim = c(40, 60), ylim = c(0, 20))
# jeda 0.1 detik agar terlihat bertahap
Sys.sleep(0.1)
}
Simulasi ekologi klasik atau sering disebut model predator–prey atau Lotka–Volterra model.
Di sebuah padang rumput hidup dua populasi: kelinci 🐇 dan serigala 🐺.
- Ketika jumlah kelinci banyak, serigala punya cukup makanan → populasi serigala naik.
- Tapi jika serigala terlalu banyak, kelinci makin habis → serigala pun kelaparan dan berkurang.
- Setelah serigala berkurang, kelinci bisa tumbuh lagi.
- Siklus ini terjadi terus-menerus — naik-turun secara alami.
# 🧠 Parameter awal
kelinci <- 40 # populasi awal kelinci
serigala <- 9 # populasi awal serigala
# parameter ekologi (disesuaikan agar hasil menarik)
laju_tumbuh_kelinci <- 0.2 # laju pertumbuhan alami kelinci
laju_makan_serigala <- 0.02 # seberapa sering kelinci dimakan
laju_mati_serigala <- 0.1 # serigala mati tanpa makanan
efisiensi_makan <- 0.01 # seberapa efektif makan kelinci menambah serigala
# 🧾 Simpan hasil untuk plotting
hasil <- data.frame(
waktu = 0,
kelinci = kelinci,
serigala = serigala
)
# 🔁 Loop simulasi selama 100 iterasi
for (t in 1:100) {
# Hitung perubahan populasi per waktu (model sederhana)
delta_kelinci <- laju_tumbuh_kelinci * kelinci - laju_makan_serigala * kelinci * serigala
delta_serigala <- efisiensi_makan * kelinci * serigala - laju_mati_serigala * serigala
# Update populasi
kelinci <- kelinci + delta_kelinci
serigala <- serigala + delta_serigala
# Pastikan tidak negatif
kelinci <- max(kelinci, 0)
serigala <- max(serigala, 0)
# Simpan ke data frame
hasil <- rbind(hasil, data.frame(waktu = t, kelinci = kelinci, serigala = serigala))
# Plot dinamis
plot(hasil$waktu, hasil$kelinci, type = "l", col = "green", lwd = 2,
ylim = c(0, max(hasil$kelinci, hasil$serigala) + 10),
xlab = "Waktu", ylab = "Populasi",
main = paste("Iterasi ke-", t, "\nDinamika Kelinci dan Serigala"))
lines(hasil$waktu, hasil$serigala, col = "red", lwd = 2)
legend("topright", legend = c("Kelinci", "Serigala"), col = c("green", "red"), lwd = 2)
Sys.sleep(0.1)
}
Interpretasi Hasil
akan terlihat grafik bergerak:
- Garis hijau (kelinci) naik → lalu diikuti merah (serigala).
- Ketika serigala banyak, kelinci turun drastis → serigala juga ikut menurun.
- Siklus naik-turun berulang — mirip fenomena alami predator–prey.
Poin Pembelajaran
- Loop: digunakan untuk memperbarui populasi di setiap iterasi waktu.
- Variabel antar iterasi: hasil satu iterasi menjadi input iterasi berikutnya.
- Model dinamis: bagaimana sistem biologis bisa disimulasikan lewat persamaan sederhana.
- Visualisasi: pemahaman konsep lebih cepat lewat grafik yang hidup.
library(ggplot2)
kelinci <- 40
serigala <- 9
laju_tumbuh_kelinci <- 0.2
laju_makan_serigala <- 0.02
laju_mati_serigala <- 0.1
efisiensi_makan <- 0.01
hasil <- data.frame(waktu = 0, kelinci = kelinci, serigala = serigala)
for (t in 1:100) {
delta_kelinci <- laju_tumbuh_kelinci * kelinci - laju_makan_serigala * kelinci * serigala
delta_serigala <- efisiensi_makan * kelinci * serigala - laju_mati_serigala * serigala
kelinci <- kelinci + delta_kelinci
serigala <- serigala + delta_serigala
kelinci <- max(kelinci, 0)
serigala <- max(serigala, 0)
hasil <- rbind(hasil, data.frame(waktu = t, kelinci = kelinci, serigala = serigala))
p <- ggplot(hasil, aes(x = waktu)) +
geom_line(aes(y = kelinci, color = "Kelinci"), linewidth = 1.5) +
geom_line(aes(y = serigala, color = "Serigala"), linewidth = 1.5) +
scale_color_manual(values = c("Kelinci" = "forestgreen", "Serigala" = "firebrick")) +
labs(title = paste("Iterasi ke-", t),
y = "Populasi", x = "Waktu", color = "Spesies") +
theme_minimal(base_size = 14)
print(p)
Sys.sleep(0.1)
} 메타데이터
- post_id
- 2ef5f9d49778
- slug
- looping-di-r-2ef5f9d49778
- url
- https://medium.com/@986110101/looping-di-r-2ef5f9d49778
- canonical_url
- https://medium.com/@986110101/looping-di-r-2ef5f9d49778
- author_url
- https://medium.com/@986110101
- status
- ok
- fetched_at
- 2026-07-16 00:24:18