Vektor di R berdimensi satu, sehingga data tabular sederhana seperti nilai beberapa siswa pada beberapa mata pelajaran tidak dapat langsung disimpan di dalamnya. Matriks melengkapi kekurangan tersebut dengan menyusun data dalam dua dimensi, yaitu baris dan kolom, dengan syarat seluruh isinya bertipe sama. Topik ini membahas pembuatan matriks, pengambilan baris dan kolom, operasi ringkas per baris dan per kolom, serta pengenalan t() dan perkalian matriks.
Membuat matriks dengan matrix()#
Fungsi matrix() membentuk matriks dari satu vektor data beserta ukuran yang diinginkan. Secara bawaan, isian vektor mengalir menuruni kolom terlebih dahulu, yaitu kolom pertama terisi penuh sebelum kolom kedua dimulai. Contoh berikut menyusun nilai tiga siswa untuk dua mata pelajaran, lengkap dengan nama baris dan nama kolom.
nilai <- matrix(c(80, 85, 78, 90, 70, 88), nrow = 3, ncol = 2)
rownames(nilai) <- c("Ali", "Budi", "Citra")
colnames(nilai) <- c("Matematika", "IPA")
nilai Matematika IPA
Ali 80 90
Budi 85 70
Citra 78 88Argumen byrow = TRUE mengubah arah pengisian menjadi menyamping mengikuti baris. Perbandingan berikut memperlihatkan susunan angka 1 sampai 6 pada kedua arah pengisian.
matrix(1:6, nrow = 2, ncol = 3)
matrix(1:6, nrow = 2, ncol = 3, byrow = TRUE) [,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6Ukuran matriks dibaca dengan dim(), sedangkan nrow() dan ncol() membaca jumlah baris dan jumlah kolomnya secara terpisah.
dim(nilai)
nrow(nilai)
ncol(nilai)[1] 3 2
[1] 3
[1] 2Mengambil baris dan kolom#
Pengindeksan matriks menggunakan dua indeks, yaitu [baris, kolom]. Kedua indeks dapat berupa angka maupun nama, dan salah satu indeksnya boleh dikosongkan untuk mengambil seluruh baris atau seluruh kolom.
nilai["Ali", "IPA"]
nilai[1, 2]
nilai[, 1]
nilai[2, ][1] 90
[1] 90
Ali Budi Citra
80 85 78
Matematika IPA
85 70Hasil pengambilan satu elemen berupa vektor sepanjang satu. Hasil pengambilan satu baris atau satu kolom juga berupa vektor, lengkap dengan nama-namanya. Perhatikan urutan indeksnya, yaitu baris lebih dahulu, sehingga nilai[1, 2] berarti elemen baris pertama kolom kedua dan bukan sebaliknya.
Ringkasan per baris dan per kolom#
Empat fungsi meringkas matriks tanpa perulangan eksplisit, yaitu rowSums(), colSums(), rowMeans(), dan colMeans(). Keluarannya berupa vektor bernama, satu nilai untuk setiap baris atau setiap kolom.
rowSums(nilai)
colSums(nilai) Ali Budi Citra
170 155 166
Matematika IPA
243 248rowMeans(nilai)
colMeans(nilai) Ali Budi Citra
85.0 77.5 83.0
Matematika IPA
81.00000 82.66667Fungsi yang lebih umum daripada keempat fungsi khusus di atas adalah apply() dengan argumen margin. Margin 1 berarti fungsi diterapkan pada setiap baris, dan margin 2 berarti pada setiap kolom. Contoh berikut menghitung nilai tertinggi pada setiap baris dan setiap kolom.
apply(nilai, 1, max)
apply(nilai, 2, max) Ali Budi Citra
90 85 88
Matematika IPA
85 90Untuk jumlah dan rata-rata, fungsi khusus seperti colSums() lebih cepat daripada apply(), tetapi apply() melayani fungsi apa pun, misalnya max pada contoh di atas.
Transposisi dan perkalian matriks#
Fungsi t() menukar baris menjadi kolom, yang berguna saat orientasi data perlu dibalik.
t(nilai) Ali Budi Citra
Matematika 80 85 78
IPA 90 70 88Perkalian matriks ditulis dengan operator %*%, berbeda dari perkalian elemen demi elemen yang memakai tanda *. Contoh berikut mengalikan matriks nilai dengan vektor bobot untuk menghitung nilai akhir berbobot tiap siswa, dengan bobot Matematika lebih besar daripada IPA.
bobot <- c(0.6, 0.4)
nilai %*% bobot [,1]
Ali 84
Budi 79
Citra 82Hasilnya berupa matriks satu kolom. Pada perkalian matriks, jumlah kolom matriks kiri harus sama dengan jumlah baris matriks kanan, dan hasilnya selalu berukuran jumlah baris matriks kiri kali jumlah kolom matriks kanan. Bagian ini cukup sebagai perkenalan, dan penerapan penuhnya baru ditemui pada materi pemodelan.
Kesalahan umum#
Kesalahan pertama adalah mencampur tipe data. Matriks menuntut seluruh isinya bertipe sama, dan apabila satu angka dicampur teks, seluruh matriks dipaksa menjadi teks tanpa pesan error apa pun.
matrix(c("Ali", 80, "Budi", 85), nrow = 2) [,1] [,2]
[1,] "Ali" "Budi"
[2,] "80" "85"Seluruh isinya kini bertanda kutip, yaitu character, sehingga perhitungan matematis tidak lagi dapat dilakukan. Kondisi semacam ini tidak memunculkan pesan apa pun, sehingga tipe isinya perlu dijaga sejak pembuatan.
Kesalahan kedua adalah tertukarnya urutan indeks. Bentuk [baris, kolom] mudah tertukar dengan kebiasaan kolom lebih dahulu pada beberapa alat lain, dan pertukaran seperti ini tidak memunculkan error karena kedua indeksnya tetap sah. Apabila hasil pengindeksan terlihat tidak sesuai dugaan, periksa urutan indeksnya terlebih dahulu.
Ringkasan#
matrix()menyusun vektor menjadi dua dimensi dengan pengisian menurut kolom secara bawaan, danbyrow = TRUEmengubahnya menjadi menurut baris.- Pengindeksan memakai
[baris, kolom], dan indeks yang dikosongkan berarti seluruh baris atau seluruh kolom. rowSums(),colSums(),rowMeans(), dancolMeans()meringkas matriks per baris dan per kolom, sedangkanapply()melayani fungsi apa pun melalui argumen margin.t()menukar baris dengan kolom, dan%*%melakukan perkalian matriks yang berbeda dari perkalian elemen demi elemen.- Pencampuran tipe memaksa seluruh matriks menjadi teks tanpa pesan error.
Referensi#
- An Introduction to R — CRAN — bagian Arrays and matrices menjelaskan pembentukan, pengindeksan, dan operasi matriks.