Part 2 — Struktur Data I: Vektor & List

Membuat vektor dan list, indexing, slicing, modifikasi elemen, serta operasi vektorisasi di R.
Fundamental
Struktur Data
Diterbitkan

26 Februari 2026

Fundamental Series — Part 2 of 20

Vektor adalah struktur data paling fundamental di R. Hampir semua hal di R adalah vektor atau dibangun dari vektor. Part ini membahas vektor, list, dan cara mengakses elemennya.


Vektor: Koleksi Satu Tipe

Vektor dibuat dengan fungsi c() (combine):

# Vektor numerik
gdp <- c(45.2, 38.1, 52.7, 41.3, 88.6)

# Vektor character
kota <- c("Jakarta", "Bandung", "Surabaya")

# Vektor logical
lulus <- c(TRUE, FALSE, TRUE, TRUE, FALSE)
PentingSatu Tipe!

Vektor hanya bisa menyimpan satu tipe data. Jika dicampur, R otomatis melakukan coercion:

c(1, "dua", TRUE)    # "1" "dua" "TRUE" — semua jadi character
c(1, TRUE, FALSE)    # 1 1 0 — logical jadi numeric

Membuat Vektor dengan Pola

# Sequence
1:10              # 1 2 3 4 5 6 7 8 9 10
seq(0, 1, by = 0.2)  # 0.0 0.2 0.4 0.6 0.8 1.0
seq(1, 100, length.out = 5)  # 1 25.75 50.5 75.25 100

# Repetisi
rep(0, 5)         # 0 0 0 0 0
rep(c(1, 2), 3)   # 1 2 1 2 1 2
rep(c(1, 2), each = 3)  # 1 1 1 2 2 2

Indexing: Mengakses Elemen

R menggunakan index mulai dari 1 (bukan 0 seperti Python).

x <- c(10, 20, 30, 40, 50)

# Akses satu elemen
x[1]       # 10 (elemen pertama)
x[3]       # 30
x[5]       # 50

# Akses beberapa elemen
x[c(1, 3, 5)]   # 10 30 50
x[2:4]           # 20 30 40

# Exclude elemen (negatif)
x[-1]            # 20 30 40 50 (tanpa elemen pertama)
x[-c(1, 5)]     # 20 30 40 (tanpa elemen pertama & terakhir)

Indexing dengan Logical

x <- c(10, 20, 30, 40, 50)

x[x > 25]       # 30 40 50
x[x >= 20 & x <= 40]  # 20 30 40

Named Indexing

nilai <- c(mtk = 85, ipa = 90, ips = 78)

nilai["mtk"]     # 85
nilai[c("ipa", "ips")]  # 90 78
names(nilai)     # "mtk" "ipa" "ips"

Modifikasi Vektor

x <- c(10, 20, 30, 40, 50)

# Ubah satu elemen
x[3] <- 99       # 10 20 99 40 50

# Ubah beberapa elemen
x[c(1, 5)] <- 0  # 0 20 99 40 0

# Tambah elemen
x <- c(x, 60)    # 0 20 99 40 0 60

# Hapus elemen
x <- x[-3]       # hapus elemen ke-3

Operasi Vektorisasi

Operasi di R berjalan elemen per elemen secara otomatis — tidak perlu loop:

x <- c(1, 2, 3, 4, 5)

x + 10      # 11 12 13 14 15
x * 2       # 2 4 6 8 10
x^2         # 1 4 9 16 25
sqrt(x)     # 1.000 1.414 1.732 2.000 2.236

Operasi Antar Vektor

a <- c(1, 2, 3)
b <- c(10, 20, 30)

a + b       # 11 22 33
a * b       # 10 40 90
PeringatanRecycling

Jika panjang vektor berbeda, R mendaur ulang vektor yang lebih pendek:

c(1, 2, 3, 4) + c(10, 20)   # 11 22 13 24
# c(10,20) didaur ulang menjadi c(10,20,10,20)

Ini kadang berguna, kadang berbahaya. R memberi warning jika panjangnya bukan kelipatan.

Fungsi Agregasi

x <- c(10, 20, 30, 40, 50)

length(x)    # 5
sum(x)       # 150
mean(x)      # 30
min(x)       # 10
max(x)       # 50
range(x)     # 10 50
sort(x, decreasing = TRUE)  # 50 40 30 20 10

List: Koleksi Multi-Tipe

List bisa menyimpan berbagai tipe data dan objek dengan panjang berbeda:

mahasiswa <- list(
  nama = "Andi",
  umur = 22,
  nilai = c(85, 90, 78),
  lulus = TRUE
)

Akses Elemen List

# Dengan $
mahasiswa$nama         # "Andi"
mahasiswa$nilai        # 85 90 78

# Dengan [[ ]] (index posisi)
mahasiswa[[1]]         # "Andi"
mahasiswa[["umur"]]    # 22

# Dengan [ ] — mengembalikan sub-list (bukan elemennya)
mahasiswa[1]           # $nama [1] "Andi" (masih list!)
Penting[[ vs [
  • [[ ]] → mengambil isi elemen (skalar/vektor)
  • [ ] → mengambil sub-list (tetap list)

Analogi: [[ ]] = membuka kotak dan mengambil isinya. [ ] = mengambil kotak kecil dari kotak besar.

Modifikasi List

# Tambah elemen baru
mahasiswa$jurusan <- "Ekonomi"

# Ubah elemen
mahasiswa$umur <- 23

# Hapus elemen
mahasiswa$lulus <- NULL

# Cek struktur
str(mahasiswa)

Matrix (Bonus)

Matrix adalah vektor 2 dimensi:

m <- matrix(1:12, nrow = 3, ncol = 4)
m
#      [,1] [,2] [,3] [,4]
# [1,]    1    4    7   10
# [2,]    2    5    8   11
# [3,]    3    6    9   12

# Akses elemen
m[1, 3]     # 7 (baris 1, kolom 3)
m[2, ]      # 2 5 8 11 (seluruh baris 2)
m[, 4]      # 10 11 12 (seluruh kolom 4)

# Dimensi
dim(m)      # 3 4
nrow(m)     # 3
ncol(m)     # 4

Latihan

BahayaLatihan 2.1 — Vektor
suhu <- c(28.5, 30.1, 27.8, 31.2, 29.0, 33.5, 26.4)

# 1. Berapa panjang vektor suhu?
# 2. Ambil elemen ke-2 sampai ke-5
# 3. Ambil semua suhu yang di atas 30 derajat
# 4. Berapa rata-rata suhu?
# 5. Ganti elemen terakhir menjadi 28.0
BahayaLatihan 2.2 — Named Vector
# Buat named vector:
pendapatan <- c(jakarta = 250, bandung = 150, surabaya = 180,
                medan = 120, makassar = 100)

# 1. Akses pendapatan Jakarta
# 2. Ambil kota yang pendapatannya > 140
# 3. Urutkan dari terbesar ke terkecil
# 4. Hitung selisih max dan min (range)
BahayaLatihan 2.3 — List
# Buat list berisi info provinsi:
# - nama: "Jawa Barat"
# - ibukota: "Bandung"
# - kabupaten: vektor 5 nama kabupaten
# - populasi: 48.27 (juta)

# 1. Akses nama ibukota
# 2. Akses kabupaten ke-3
# 3. Tambahkan elemen baru: luas = 35377.76
# 4. Lihat struktur list dengan str()

Ringkasan

Konsep Keterangan
c() Buat vektor
1:10, seq(), rep() Vektor berpola
x[i] Akses elemen ke-i (mulai dari 1)
x[-i] Semua elemen kecuali ke-i
x[x > 5] Filter dengan kondisi
Vektorisasi Operasi otomatis per elemen
list() Buat list (multi-tipe)
$, [[ ]] Akses elemen list
matrix() Vektor 2 dimensi

Sebelumnya: Part 1 — Variabel & Tipe Data Selanjutnya: Part 3 — Struktur Data II: DataFrame