List

List sebagai wadah data heterogen dan cara mengakses elemen bersarangnya.

Daftar isi

Vektor menyimpan banyak nilai, tetapi semuanya harus bertipe sama. Apabila satu objek perlu memuat campuran data, misalnya nama berbentuk teks, sekumpulan angka nilai, dan penanda logika, satu vektor tidak lagi cukup. List adalah wadah generik di R yang menampung elemen dari tipe apa pun, termasuk list lain di dalamnya. Topik ini membahas cara membuat list, menamai elemennya, mengakses isi yang bersarang, mengubah isinya, serta membaca strukturnya dengan fungsi str().

Membuat dan mengamati list#

Fungsi list() membentuk list dari argumen-argumennya, yaitu satu argumen menjadi satu elemen. Elemen dapat diberi nama saat pembuatan dengan bentuk nama = nilai, dan nama inilah yang digunakan untuk mengaksesnya nanti. Contoh berikut menyusun profil satu siswa yang berisi teks dan vektor angka.

r Contoh: membuat list profil siswa
siswa <- list(nama = "Ali", kelas = "11A", nilai = c(80, 85, 78))
siswa
text Keluaran
$nama
[1] "Ali"

$kelas
[1] "11A"

$nilai
[1] 80 85 78

List yang ditampilkan memunculkan setiap elemen dengan tanda $ dan namanya, lalu isi elemen tersebut persis seperti vektor biasa. Jumlah elemen dihitung dengan length(). Struktur list diperiksa dengan str() (structure), yang menampilkan tipe dan panjang setiap elemen secara ringkas.

r Contoh: panjang dan struktur list
length(siswa)
str(siswa)
text Keluaran
[1] 3
List of 3
 $ nama : chr "Ali"
 $ kelas: chr "11A"
 $ nilai: num [1:3] 80 85 78

Tanda chr dan num pada keluaran str() menunjukkan tipe elemen, yaitu character dan numeric. List tanpa nama elemen juga sah dibuat, dan str() menandai posisinya dengan $ tanpa nama. Pada list berikut, ketiga elemennya bertipe berbeda, sesuatu yang tidak mungkin disatukan dalam satu vektor atomik (atomic vector) karena vektor atomik selalu memaksa satu tipe bagi seluruh isinya.

r Contoh: list tanpa nama elemen
campuran <- list(80, "Ali", TRUE)
str(campuran)
text Keluaran
List of 3
 $ : num 80
 $ : chr "Ali"
 $ : logi TRUE

Menyusun list bersarang#

Elemen sebuah list boleh berupa list lain, sehingga struktur bertingkat dapat disusun untuk data yang memang bertingkat, misalnya satu kelas yang memuat profil siswanya. Contoh berikut membungkus list siswa ke dalam list kelas, lengkap dengan wali kelas, tahun ajaran, dan penanda status aktif.

r Contoh: list bersarang untuk data kelas
kelas <- list(
  wali = "Bu Sari",
  tahun_ajaran = "2025/2026",
  aktif = TRUE,
  siswa = siswa
)
kelas
text Keluaran
$wali
[1] "Bu Sari"

$tahun_ajaran
[1] "2025/2026"

$aktif
[1] TRUE

$siswa
$siswa$nama
[1] "Ali"

$siswa$kelas
[1] "11A"

$siswa$nilai
[1] 80 85 78

Keluarannya memperlihatkan elemen siswa yang isinya list lagi, lengkap dengan $siswa$nama dan seterusnya. Struktur bertingkat seperti ini muncul di banyak tempat pada R. Fungsi pemodelan seperti lm(), misalnya, mengembalikan satu objek list yang memuat koefisien, residual, dan berbagai informasi lain dalam satu wadah.

Mengakses elemen dengan $ dan [[ ]]#

Elemen bernama diakses dengan tanda $ atau dengan `[["nama"]]`. Keduanya mengembalikan isi elemen, bukan wadahnya, sehingga hasilnya dapat langsung diindeks lagi seperti pada siswa$nilai[2].

r Contoh: mengakses elemen bernama
kelas$wali
kelas[["tahun_ajaran"]]
siswa$nilai[2]
text Keluaran
[1] "Bu Sari"
[1] "2025/2026"
[1] 85

Elemen bersarang dijangkau dengan menyambung aksesnya, baik lewat tanda $ beruntun maupun lewat [[ yang diulang untuk setiap tingkatnya.

r Contoh: mengakses elemen bersarang
kelas$siswa$nama
kelas[["siswa"]][["nilai"]]
text Keluaran
[1] "Ali"
[1] 80 85 78

Perbedaan penting terletak pada tanda kurung tunggal. Ekspresi siswa[1] mengambil elemen pertama, tetapi hasilnya tetap dibungkus sebagai list, sedangkan siswa[[1]] mengeluarkan isinya. Fungsi str() memperlihatkan perbedaan kelas keduanya.

r Contoh: kurung tunggal versus kurung ganda
siswa[1]
siswa[[1]]
str(siswa[1])
str(siswa[[1]])
text Keluaran
$nama
[1] "Ali"

[1] "Ali"
List of 1
 $ nama: chr "Ali"
 chr "Ali"

Hasil siswa[1] berupa List of 1 yang masih perlu dibuka dengan [[, sedangkan siswa[[1]] langsung berupa teks "Ali". Kaidahnya berlaku umum: tanda kurung tunggal selalu mengembalikan wadah yang sama jenisnya, sedangkan [[ dan $ mengembalikan satu isi.

Mengubah, menambah, dan menghapus elemen#

Mengubah isi list dilakukan dengan penugasan ke elemen yang dituju. Apabila namanya sudah ada, nilai lamanya diganti, dan apabila belum ada, elemen baru ditambahkan di bagian akhir list.

r Contoh: menambah dan mengubah elemen
siswa$umur <- 16
siswa$nilai <- siswa$nilai + 2
siswa
text Keluaran
$nama
[1] "Ali"

$kelas
[1] "11A"

$nilai
[1] 82 87 80

$umur
[1] 16

Panjang list bertambah otomatis setelah elemen baru ditugaskan. Untuk menghapus elemen, cukup tugaskan NULL ke elemen tersebut.

r Contoh: menghapus elemen dengan NULL
siswa$umur <- NULL
siswa
text Keluaran
$nama
[1] "Ali"

$kelas
[1] "11A"

$nilai
[1] 82 87 80

Elemen umur hilang dan panjang list kembali menjadi tiga. Penggantian menurut posisi juga sah dilakukan, misalnya siswa[[2]] <- "12A", meskipun penugasan menurut nama lebih aman dibaca karena maknanya jelas.

Kesalahan umum#

Dua perilaku sering mengejutkan saat mengakses list. Yang pertama, nama yang tidak ada tidak memunculkan error, melainkan NULL. Perilaku ini berlaku baik lewat $ maupun lewat `[["nama"]]`.

r Contoh: mengakses nama yang tidak ada
siswa$nim
text Keluaran
NULL
r Contoh: kurung ganda dengan nama yang tidak ada
siswa[["nim"]]
text Keluaran
NULL

Perilaku kedua adalah indeks posisi di luar rentang, yang memang menghasilkan error.

r Contoh: indeks di luar rentang
siswa[[99]]
text Keluaran
Error in siswa[[99]] : subscript out of bounds

Pesan subscript out of bounds berarti posisi yang diminta tidak tersedia. R sengaja menangani kedua kasus ini secara berbeda, sehingga hasil NULL maupun pesan error perlu dikenali agar sumber masalahnya cepat ditemukan.

Ringkasan#

  • List menampung elemen dari tipe apa pun, termasuk list lain, sehingga cocok untuk data yang tidak seragam.
  • Elemen bernama diakses dengan $ atau `[["nama"]]`, dan keduanya mengembalikan isi elemen, bukan wadahnya.
  • Tanda kurung tunggal [ mengembalikan list baru, sehingga siswa[1] masih berupa list sedangkan siswa[[1]] berupa isinya.
  • Penugasan ke nama baru menambah elemen, dan penugasan NULL menghapus elemen.
  • Nama yang tidak ada mengembalikan NULL tanpa pesan error, sedangkan posisi di luar rentang menghasilkan error subscript out of bounds.

Referensi#