← Back to list

Looping di R

beberapa contoh looping yang menarik

RB Fajriya Hakim · 2025-10-29 22:37 · 1 claps · 4.9 min read
#looping #r
Open on Medium ↗

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

  1. Buat dataset berisi 100 angka acak dari distribusi tertentu (misal uniform).
  2. Ambil sampel acak sebanyak 20 angka dari dataset tersebut.
  3. Hitung rata-ratanya.
  4. Ulangi proses itu sebanyak 100 kali.
  5. 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

  1. Loop: digunakan untuk memperbarui populasi di setiap iterasi waktu.
  2. Variabel antar iterasi: hasil satu iterasi menjadi input iterasi berikutnya.
  3. Model dinamis: bagaimana sistem biologis bisa disimulasikan lewat persamaan sederhana.
  4. 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