Part 17 — Apply & Vectorisasi

Operasi vectorized dan apply di R: sapply, lapply, map, across, dan kapan pakai loop vs vectorized.
Fundamental
Apply
Diterbitkan

26 Februari 2026

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 kolom

Loop 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^2

Latihan

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 tibble

Ringkasan

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