Fungsi Matriks di R: Buat, Cetak, tambahkan Kolom & Iris

โšก Ringkasan Cerdas

Matriks di R adalah larik dua dimensi yang menyimpan satu tipe data tunggal di sepanjang m baris dan n kolom, dibangun dengan matrix(), diperluas dengan cbind() dan rbind(), dan diakses melalui tanda kurung siku.

  • ๐Ÿงฉ Struktur: Matriks adalah vektor dengan atribut dimensi, sehingga setiap sel harus memiliki tipe data yang sama.
  • ๏ธ Penciptaan: matrix(data, nrow, ncol, byrow) menyusun sebuah urutan, dan R menyimpulkan dimensi yang hilang.
  • ๐Ÿ”„ Isi pesanan: byrow = FALSE mengisi kolom demi kolom, sedangkan byrow = TRUE mengisi baris demi baris.
  • โž• Pertumbuhan: cbind() menambahkan kolom dan rbind() menambahkan baris, dengan syarat dimensi yang digunakan sama.
  • โœ‚ mengiris: m[row, column] membaca baris terlebih dahulu, dan sisi kosong memilih semua yang ada di sisi tersebut.
  • ๏ธ Label: dimnames, rownames() dan colnames() mengganti placeholder [,1] dengan nama yang mudah dibaca.
  • โž•โž– Hitung: Tanda bintang (*) mengalikan elemen demi elemen, sedangkan %*% melakukan perkalian matriks.

Fungsi Matriks di R: Buat, Cetak, Tambahkan Kolom dan Irisan

Fungsi Matriks di R

Fungsi matriks pada R adalah array 2 dimensi yang memiliki m jumlah baris dan n jumlah kolom. Dengan kata lain matriks pada pemrograman R merupakan gabungan dua vektor atau lebih dengan tipe data yang sama.

Pada dasarnya, matriks hanyalah sebuah vektor yang membawa atribut dim dengan panjang dua. Itulah mengapa setiap elemen harus memiliki satu tipe yang sama: saat nilai karakter bergabung dengan angka, seluruh matriks akan diubah menjadi karakter. R menyimpan nilai-nilai dalam satu deret kolom dan menggunakan dim untuk menentukan di mana setiap baris berakhir, sehingga pilihan tipe data berlaku untuk seluruh objek sekaligus.

Catatan: Fungsi matrix() sendiri selalu mengembalikan tepat dua dimensi. Untuk membangun struktur dengan tiga dimensi atau lebih di R, gunakan array() dengan vektor dim, atau tetapkan dim() secara langsung. Diagram di bawah ini menunjukkan tata letak baris dan kolom yang diikuti setiap matriks.

Tata letak baris dan kolom fungsi matriks di R.

Cara Membuat Matriks di R

Kita dapat membuat matriks dengan fungsi tersebut. matriks()Tanda tangan dasar R membutuhkan lima argumen, dan tiga argumen yang paling sering digunakan ditunjukkan di sini:

matrix(data, nrow, ncol, byrow = FALSE)

Argumen:

  • data: Kumpulan elemen yang akan disusun R menjadi baris dan kolom matriks.
  • sekarang: Jumlah baris.
  • ncol: Jumlah kolom.
  • baris demi baris: Sebuah flag logis. Dengan nilai default byrow = FALSE, matriks diisi kolom demi kolom, dari atas ke bawah. Dengan byrow = TRUE, matriks diisi baris demi baris, dari kiri ke kanan.
  • nama redup: Sebuah daftar opsional dengan panjang dua yang berisi nama baris dan nama kolom.

Dua detail dari referensi dasar R perlu diketahui sebelum contoh pertama. Jika hanya salah satu dari nrow dan ncol yang diberikan, R akan menyimpulkan yang lainnya dari panjang data. Dan jika data berisi terlalu sedikit elemen untuk mengisi bentuk yang Anda minta, nilai-nilai tersebut akan digunakan kembali daripada ditolak.

Mari kita buat dua matriks 5ร—2 dari urutan angka 1 hingga 10, satu dengan byrow = TRUE dan satu dengan byrow = FALSE, untuk melihat perbedaannya.

# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow =  TRUE 
matrix_a <-matrix(1:10, byrow = TRUE, nrow = 5)
matrix_a

Keluaran:

Karena byrow = TRUE digunakan, konsol akan mengisi baris pertama dengan 1 dan 2, baris kedua dengan 3 dan 4, dan seterusnya.

Output konsol dari matrix_a yang diisi baris demi baris dengan byrow = TRUE

Sekarang, mari kita cetak dimensi matriks di R dengan dim(). Sintaks untuk mencetak matriks di R menggunakan dim() adalah:

# Print dimension of the matrix with dim()
dim(matrix_a)

Keluaran:

## [1] 5 2

Fungsi dim() mengembalikan jumlah baris terlebih dahulu dan jumlah kolom kedua, yang mengkonfirmasi bentuk 5ร—2.

Isi matriks berdasarkan kolom dengan byrow = FALSE

Sepuluh angka yang sama dan baris yang sama menghasilkan susunan yang berbeda begitu arah pengisian berubah. Keeping Secara default, fungsi byrow mengirimkan nilai ke kolom pertama sebelum kolom kedua dimulai.

# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow =  FALSE
matrix_b <-matrix(1:10, byrow = FALSE, nrow = 5)
matrix_b

Keluaran:

Output konsol dari matrix_b yang diisi kolom demi kolom dengan byrow = FALSE

Sekali lagi, cetak dimensi matriks menggunakan dim(). Di bawah ini adalah sintaks dimensi matriks cetak R:

# Print dimension of the matrix with dim()
dim(matrix_b)

Keluaran:

## [1] 5 2

Bentuknya tidak berubah pada ukuran 5ร—2, karena byrow mengubah urutan pengisian dan tidak pernah mengubah dimensinya.

Note: Menggunakan perintah matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) akan memiliki efek yang sama seperti di atas, karena R menyimpulkan nrow = 5 dari sepuluh nilai yang diberikan.

Anda juga dapat membuat matriks 4ร—3 menggunakan ncol. R akan membuat 3 kolom dan mengisi setiap kolom dari atas ke bawah. Lihat contohnya.

matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c

Keluaran:

##       [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12

Header kolom [,1] hingga [,3] dan label baris [1,] hingga [4,] adalah placeholder bawaan R. Placeholder ini akan hilang segera setelah nama dimensi sebenarnya diberikan, seperti yang akan ditunjukkan nanti dalam tutorial ini.

Contoh:

dim(matrix_c)

Keluaran:

## [1] 4 3

Tambahkan Kolom ke Matriks dengan cbind()

Anda dapat menambahkan kolom ke matriks R dengan perintah cbind(). cbind() berarti penggabungan kolom, dan dapat menggabungkan sebanyak matriks atau kolom yang ditentukan. Misalnya, contoh sebelumnya membuat matriks 5ร—2. Kita menggabungkan kolom ketiga dan memverifikasi dimensinya menjadi 5ร—3.

Contoh:

# concatenate c(1:5) to the matrix_a
matrix_a1 <- cbind(matrix_a, c(1:5))
# Check the dimension
dim(matrix_a1)

Keluaran:

## [1] 5 3

Contoh:

matrix_a1

Keluaran

##       [,1] [,2] [,3]
## [1,]    1    2    1
## [2,]    3    4    2
## [3,]    5    6    3
## [4,]    7    8    4
## [5,]    9   10    5

Contoh:

Kita juga dapat menggabungkan lebih dari satu kolom sekaligus. Blok berikutnya membangun matriks_a2, matriks 4ร—3 yang berisi angka 13 hingga 24, sehingga dapat digabungkan dengan matriks 4ร—3_c untuk menghasilkan matriks 4ร—6 yang mencakup angka 1 hingga 24.

matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)

Keluaran:

##      [,1] [,2] [,3]
## [1,]   13   17   21
## [2,]   14   18   22
## [3,]   15   19   23
## [4,]   16   20   24

Contoh:

matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)		
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)

Keluaran:

## [1] 4 6

CATATANJumlah baris matriks di R harus sama agar cbind() berfungsi. Jika berbeda, R akan menggunakan kembali input yang lebih pendek atau menimbulkan kesalahan, jadi memeriksa dim() pada kedua objek terlebih dahulu adalah kebiasaan yang lebih aman.

Fungsi cbind() menggabungkan kolom, sedangkan rbind() menambahkan baris. Mari kita tambahkan satu baris ke matriks matrix_c kita dan verifikasi dimensinya adalah 5ร—3.

matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
# Create a vector of 3 columns
add_row <- c(1:3)
# Append to the matrix
matrix_c <- rbind(matrix_c, add_row)
# Check the dimension
dim(matrix_c)

Keluaran:

## [1] 5 3

Perhatikan bahwa mengikat vektor bernama seperti add_row juga memberikan nama yang sama pada baris baru tersebut, yang merupakan langkah pertama menuju matriks berlabel yang akan dibahas lebih lanjut di bawah ini.

Iris Matriks

Kita dapat memilih satu atau banyak elemen dari sebuah matriks di Pemrograman R dengan menggunakan tanda kurung siku [ ]. Di dalam tanda kurung, pemilih baris berada di urutan pertama dan pemilih kolom di urutan kedua, dipisahkan oleh koma. Di sinilah pemotongan (slicing) berperan.

Sebagai contoh:

  • matriks_c[1,2] memilih elemen pada baris pertama dan kolom kedua.
  • matrix_c[1:3,2:3] menghasilkan matriks irisan R dengan data pada baris 1, 2, 3 dan kolom 2 dan 3.
  • matriks_c[,1] memilih semua elemen kolom pertama.
  • matriks_c[1,] memilih semua elemen baris pertama.

Dengan demikian, membiarkan sisi koma kosong berarti setiap nilai di sisi tersebut. Salah satu konsekuensi yang sering membingungkan pemula adalah: ketika satu baris atau kolom dipilih, R akan menghilangkan dimensi yang kosong dan mengembalikan vektor biasa. Menambahkan drop = FALSE, seperti pada matrix_c[1, , drop = FALSE], akan mempertahankan hasilnya sebagai matriks.

Inilah output yang Anda dapatkan untuk kode di atas

Hasil konsol dari empat ekspresi pemotongan matriks di R.

Sebutkan Baris dan Kolom dari Matriks di R.

Label default seperti [,1] dan [3,] membuat output sulit dibaca begitu matriks tersebut memiliki makna sebenarnya. Argumen dimnames, dan fungsi pengganti rownames() dan colnames(), melampirkan label teks yang kemudian ikut bersama matriks melalui cbind(), t() dan setiap operasi pemotongan.

# Name the rows and columns while the matrix is built
sales <- matrix(1:6, nrow = 2, ncol = 3,
                dimnames = list(c('north', 'south'), c('q1', 'q2', 'q3')))

# Or attach the names afterwards
rownames(sales) <- c('north', 'south')
colnames(sales) <- c('q1', 'q2', 'q3')

# Read the names back as a list of two character vectors
dimnames(sales)

# Names make label based slicing possible
sales['north', 'q2']
fungsi Membaca set
nama_dim(m) Kedua dimensi sebagai daftar dua vektor dimnames(m) <- list(rows, cols)
nama baris(m) Label baris nama baris(m) <- baris
nama kolom(m) Label kolom nama kolom(m) <- kolom
dimensi(m) Baris dan kolom sebagai dua bilangan bulat dim(m) <- c(nrow, ncol)

Setelah label ada, sales['north', 'q2'] jauh lebih jelas daripada sales[1, 2] dan tetap ada meskipun baris diurutkan ulang. Mengatur komponen dimnames ke NULL akan menghapus kumpulan label tersebut lagi, dan matriks yang dikonversi dengan as.data.frame() akan membawa nama baris dan kolomnya langsung ke dalam bingkai data.

Matriks OperaFungsi-fungsi dalam R: Aritmatika, Transpose, dan Perkalian

Aritmatika pada matriks adalah tempat aturan tipe tunggal terbukti bermanfaat. R dasar menangani seluruh himpunan tanpa paket tambahan, tetapi dua operator mudah membingungkan: * mengalikan elemen demi elemen, sedangkan %*% melakukan perkalian matriks yang sebenarnya dan mengharuskan kolom operan kiri sesuai dengan baris operan kanan.

m1 <- matrix(1:4, nrow = 2)
m2 <- matrix(5:8, nrow = 2)

m1 + m2          # element by element addition
m1 * m2          # element by element product, NOT matrix multiplication
m1 %*% m2        # true matrix multiplication
t(m1)            # transpose: rows become columns
solve(m1)        # inverse, for a square matrix that is not singular

rowSums(m1)      # one total per row
colMeans(m1)     # one mean per column
apply(m1, 1, max)   # any function, applied row by row
  • t(m): Mentranspos matriks, sehingga elemen [i, j] menjadi [j, i]. Nama dimensi tetap dipertahankan.
  • selesaikan(m): Mengembalikan invers dari matriks persegi non-singular, dan solve(a, b) menyelesaikan sistem linear.
  • Jumlah baris / Jumlah kolom / Rata-rata baris / Rata-rata kolom: Didokumentasikan sebagai setara dengan apply() dengan sum atau mean, tetapi jauh lebih cepat.
  • terapkan(m, MARGIN, FUN): MARGIN = 1 menelusuri baris dan MARGIN = 2 menelusuri kolom, untuk fungsi apa pun yang Anda berikan.
  • diag, det, crossprod: Diagonal, determinan dan bentuk yang lebih cepat dari t(x) %*% y.

Karena operasi ini menggunakan vektorisasi, operasi ini menggantikan perulangan alih-alih berada di dalamnya. Ringkasan yang sebelumnya membutuhkan perulangan for bersarang pada ribuan sel kini hanya membutuhkan satu panggilan colMeans(), yang sangat penting begitu data bertambah besar.

Matriks vs Data Frame vs Array di R

Matriks, data frame, dan array semuanya tampak berbentuk persegi panjang di konsol, namun mereka menjawab pertanyaan yang berbeda. Tabel tersebut menyajikannya berdampingan.

Milik Matriks Kerangka data susunan
Ukuran Tepat 2 Tepat 2 Nomor berapa saja
Jenis kolom Satu tipe untuk keseluruhan objek Tipe berbeda untuk setiap kolom Satu tipe untuk keseluruhan objek
Dibangun dengan matriks() data.frame() Himpunan()
Penggunaan khas Komputasi numerik dan aljabar linear Data observasi campuran Tabel bertumpuk, seperti jumlah berdasarkan tahun.
Label baris dimnames opsional Nama baris selalu ada dimnames opsional
# A matrix holds one type only, so mixing coerces everything to character
mixed <- matrix(c(1, 2, 'a', 'b'), nrow = 2)
class(mixed[1, 1])

# Convert between the structures
as.data.frame(matrix_c)
as.matrix(mtcars)

# A matrix is the two dimensional case of an array
is.matrix(matrix_c)
inherits(matrix_c, 'array')

Gunakan matriks ketika setiap sel berisi jenis angka yang sama dan pekerjaannya adalah aritmatika. Gunakan matriks. bingkai data ketika kolom memuat tipe data yang berbeda, misalnya nama karakter di samping harga numerik dan faktorRaihlah daftar ketika bagian-bagiannya memiliki panjang yang berbeda, dan untuk sebuah array ketika indeks ketiga seperti waktu atau wilayah benar-benar ada. Konversi ke kedua arah relatif murah dengan as.matrix() dan as.data.frame(), sehingga strukturnya dapat mengikuti tugas, bukan sebaliknya.

Pertanyaan Umum Demo Slot

R mendaur ulang nilai-nilai tersebut alih-alih menolaknya, sehingga matrix(1:3, nrow = 2, ncol = 3) mengulang urutan tersebut. Peringatan hanya muncul ketika panjangnya bukan kelipatan tepat dari jumlah sel, yang membuat daur ulang tanpa peringatan menjadi bug yang mudah terlewatkan.

Gunakan indeks negatif: m[-2, ] menghapus baris kedua dan m[, -3] menghapus kolom ketiga. Beberapa dapat dihapus sekaligus dengan m[-c(1, 4), ]. Objek asli tidak berubah sampai Anda menetapkan hasilnya kembali.

Memilih satu baris atau kolom akan menghapus dimensi kosong secara default. Tambahkan drop = FALSE, seperti pada m[1, , drop = FALSE], untuk mempertahankan matriks satu baris. Ini penting ketika hasilnya diteruskan ke fungsi yang mengharapkan dua dimensi.

which(m == value, arr.ind = TRUE) mengembalikan hasil dua kolom yang memberikan baris dan kolom dari setiap kecocokan. Tanpa arr.ind, jawabannya adalah indeks linier tunggal yang dihitung ke bawah kolom, yang jarang Anda inginkan.

Gunakan array(data, dim = c(rows, columns, layers)) atau tetapkan dim(x) langsung pada vektor. Pengirisan kemudian mengambil satu indeks per dimensi, seperti a[2, 3, 1]. Matriks hanyalah kasus dua dimensi dari sebuah array.

Ya. Referensi dasar R menyatakan bahwa rowSums dan colMeans setara dengan apply() dengan sum atau mean tetapi jauh lebih cepat, dan keduanya mengalahkan perulangan for eksplisit karena iterasi terjadi dalam kode yang dikompilasi daripada di interpreter.

Pemodelan adalah aljabar linier: fitur membentuk matriks, koefisien membentuk vektor, dan prediksi adalah satu hasil perkalian %*%. Banyak Mesin belajar Oleh karena itu, paket-paket tersebut memerlukan matriks numerik, bukan data frame, sebagai input.

Ya. Kopilot GitHub Berjalan di RStudio 2023.09.0 dan versi yang lebih baru serta menyelesaikan kode dari komentar dalam file yang terbuka. Periksa logika dimensinya di RStudio, karena baris yang salah pun tetap menghasilkan matriks yang valid.

Ringkaslah postingan ini dengan: