Fundamental Series — Part 17 of 20
R dirancang untuk vectorized operations — operasi pada seluruh vector sekaligus, tanpa loop eksplisit. Part ini membahas kapan pakai vectorized, kapan pakai apply/map.
Vectorized Operations
x <- c(1, 2, 3, 4, 5)
# Sudah vectorized — TIDAK perlu loop
x * 2 # 2 4 6 8 10
x^2 # 1 4 9 16 25
sqrt(x) # 1.00 1.41 1.73 2.00 2.24
x > 3 # FALSE FALSE FALSE TRUE TRUE
ifelse(x > 3, "besar", "kecil")
TipAturan Praktis
Jika operasinya bisa dilakukan pada seluruh vector sekaligus, gunakan vectorized. Hindari loop kecuali benar-benar perlu.
sapply() dan lapply()
# sapply — return vector/matrix
sapply(1:5, function(x) x^2)
# 1 4 9 16 25
# lapply — return list
lapply(1:5, function(x) x^2)
# Pada list/vector yang lebih kompleks
nama_file <- c("data1.csv", "data2.csv", "data3.csv")
lapply(nama_file, read.csv)purrr::map() — Versi Modern
library(purrr)
# map — return list
map(1:5, ~ .x^2)
# map_dbl — return double vector
map_dbl(1:5, ~ .x^2)
# map_chr — return character
map_chr(c("andi", "budi"), ~ toupper(.x))
# map_dfr — return data.frame (bind rows)
map_dfr(1:3, ~ tibble(x = .x, y = .x^2))across() di dplyr
library(dplyr)
df <- tibble(
nama = c("A", "B", "C"),
x = c(10, 20, 30),
y = c(100, 200, 300)
)
# Apply ke semua kolom numerik
df |> mutate(across(where(is.numeric), ~ . / 10))
# Apply fungsi custom
df |> mutate(across(c(x, y), list(log = log, sqrt = sqrt)))apply() untuk Matrix
m <- matrix(1:12, nrow = 3)
apply(m, 1, sum) # sum per baris
apply(m, 2, sum) # sum per kolom
apply(m, 2, mean) # mean per kolomLoop vs Vectorized — Perbandingan
# LAMBAT — loop
x <- 1:1000000
result <- numeric(length(x))
for (i in seq_along(x)) {
result[i] <- x[i]^2
}
# CEPAT — vectorized
result <- x^2Latihan
BahayaLatihan 17.1
# 1. Buat fungsi standarisasi(x) = (x - mean) / sd
# 2. Pakai sapply untuk apply ke list(a=1:10, b=20:30, c=100:110)
# 3. Pakai across() untuk standarisasi semua kolom numerik di sebuah tibbleRingkasan
| Fungsi | Return | Keterangan |
|---|---|---|
sapply() |
Vector/matrix | Apply ke setiap elemen |
lapply() |
List | Apply ke setiap elemen |
map() |
List | purrr version |
map_dbl() |
Double vector | purrr typed |
across() |
Kolom dplyr | Apply ke kolom DataFrame |
apply() |
Vector/matrix | Apply ke baris/kolom matrix |
Sebelumnya: Part 16 — Reshape & Merge Selanjutnya: Part 18 — Debugging & Error Handling