R'de Matris İşlevi: Oluşturun, Yazdırın, Sütun ve Dilim ekleyin
⚡ Akıllı Özet
R dilinde matris, `matrix()` fonksiyonu ile oluşturulan, `cbind()` ve `rbind()` fonksiyonları ile genişletilen ve köşeli parantezler aracılığıyla erişilen, m satır ve n sütunda tek bir veri türünü tutan iki boyutlu bir dizidir.

R'de Matris Fonksiyonu
R'deki bir matris işlevi, m sayıda satırı ve n sayıda sütunu olan 2 boyutlu bir dizidir. Başka bir deyişle, R programlamadaki matris, aynı veri tipine sahip iki veya daha fazla vektörün birleşimidir.
Temelde, bir matris, uzunluğu iki olan bir boyut özniteliği taşıyan bir vektördür. Bu nedenle her elemanın tek bir türe sahip olması gerekir: karakter değeri sayılara eklendiği anda, tüm matris karaktere dönüştürülür. R, değerleri tek bir sütun bazında saklar ve her satırın nerede biteceğine karar vermek için boyutu kullanır, bu nedenle seçim şu şekildedir: veri tipi Bu, nesnenin tamamına aynı anda uygulanır.
Not: `matrix()` fonksiyonu her zaman tam olarak iki boyut döndürür. R'da üç veya daha fazla boyuta sahip bir yapı oluşturmak için, `dizi()` fonksiyonunu bir boyut vektörüyle kullanın veya `dim()` değerini doğrudan atayın. Aşağıdaki diyagram, her matrisin izlediği satır ve sütun düzenini göstermektedir.
R'de Matris Nasıl Oluşturulur
Fonksiyonu kullanarak bir matris oluşturabiliriz. matris()Temel R imzası beş argüman alır ve en sık kullanılan üçü burada gösterilmiştir:
matrix(data, nrow, ncol, byrow = FALSE)
argümanlar:
- veri: R'nin matrisin satır ve sütunlarına yerleştireceği elemanlar kümesi.
- darSatır sayısı.
- NcolSütun sayısı.
- dar aralık: Mantıksal bir bayrak. Varsayılan değer olan byrow = FALSE ile matris sütun sütun, yukarıdan aşağıya doğru doldurulur. byrow = TRUE ile ise satır satır, soldan sağa doğru doldurulur.
- boyut adları: Satır adlarını ve sütun adlarını içeren, iki elemanlı isteğe bağlı bir liste.
İlk örneğe geçmeden önce, temel R referansından iki ayrıntıyı bilmekte fayda var. Eğer nrow ve ncol'dan yalnızca biri verilirse, R diğerini verinin uzunluğundan çıkarır. Ve eğer veri, istediğiniz şekli doldurmak için çok az eleman içeriyorsa, değerler reddedilmek yerine geri dönüştürülür.
Şimdi, 1'den 10'a kadar olan sayı dizisinden, biri byrow = TRUE diğeri byrow = FALSE olacak şekilde iki adet 5×2 matris oluşturalım ve aradaki farkı görelim.
# 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
Çıktı:
`byrow = TRUE` kullanıldığı için konsol ilk satırı 1 ve 2 ile, ikinci satırı 3 ve 4 ile ve bu şekilde devam ederek doldurur.
dim() fonksiyonu ile matrix_a'nın boyutunu yazdırın.
Şimdi matrisin boyutunu dim() ile R'ye yazdıralım. R'de dim() kullanarak matris yazdırmanın sözdizimi şöyledir:
# Print dimension of the matrix with dim()
dim(matrix_a)
Çıktı:
## [1] 5 2
dim() fonksiyonu önce satır sayısını, sonra sütun sayısını döndürerek 5×2 şeklini doğrular.
Matrisi sütuna göre doldur (byrow = FALSE ile)
Aynı on sayı ve aynı sıra, doldurma yönü değiştiğinde farklı bir düzenleme oluşturur. Keeping `byrow` varsayılan ayarında, ikinci sütun başlamadan önce değerleri ilk sütuna doğru gönderir.
# 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
Çıktı:
dim() fonksiyonu ile matrix_b'nin boyutunu yazdırın.
Yine, dim() işlevini kullanarak matrisin boyutunu yazdırın. Aşağıda R yazdırma matrisi boyutunun sözdizimi verilmiştir:
# Print dimension of the matrix with dim()
dim(matrix_b)
Çıktı:
## [1] 5 2
5×2 boyutunda şekil değişmez, çünkü byrow boyutları değil, doldurma sırasını değiştirir.
not: matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) komutunu kullanmak yukarıdakiyle aynı etkiyi yaratacaktır, çünkü R, sağlanan on değerden nrow = 5 sonucunu çıkarır.
`ncol` kullanarak da 4x3'lük bir matris oluşturabilirsiniz. R, 3 sütun oluşturacak ve her sütunu yukarıdan aşağıya doğru dolduracaktır. Bir örneğe bakın.
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c
Çıktı:
## [,1] [,2] [,3] ## [1,] 1 5 9 ## [2,] 2 6 10 ## [3,] 3 7 11 ## [4,] 4 8 12
[,1] ila [,3] sütun başlıkları ve [1,] ila [4,] satır etiketleri R'nin varsayılan yer tutucularıdır. Bu eğitimde daha sonra gösterildiği gibi, gerçek boyut adları sağlandığı anda kaybolurlar.
Örnek:
dim(matrix_c)
Çıktı:
## [1] 4 3
cbind() ile Matrise Sütun Ekleme
cbind() komutuyla R matrisine sütun ekleyebilirsiniz. cbind() sütun bağlama anlamına gelir ve belirtilen sayıda matrisi veya sütunu birleştirebilir. Örneğin, önceki örneğimizde 5×2'lik bir matris oluşturduk. Üçüncü bir sütun ekleyerek boyutun 5×3 olduğunu doğruluyoruz.
Örnek:
# concatenate c(1:5) to the matrix_a matrix_a1 <- cbind(matrix_a, c(1:5)) # Check the dimension dim(matrix_a1)
Çıktı:
## [1] 5 3
Örnek:
matrix_a1
Çıktı
## [,1] [,2] [,3] ## [1,] 1 2 1 ## [2,] 3 4 2 ## [3,] 5 6 3 ## [4,] 7 8 4 ## [5,] 9 10 5
Örnek:
Aynı anda birden fazla sütunu da bağlayabiliriz. Sonraki blok, 13'ten 24'e kadar olan sayıları içeren 4×3'lük bir matris olan matrix_a2'yi oluşturur; böylece bu matris, 1'den 24'e kadar olan sayıları kapsayan 4×6'lık bir sonuç üretmek için 4×3'lük matrix_c ile birleştirilebilir.
matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)
Çıktı:
## [,1] [,2] [,3] ## [1,] 13 17 21 ## [2,] 14 18 22 ## [3,] 15 19 23 ## [4,] 16 20 24
Örnek:
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)
Çıktı:
## [1] 4 6
NOTR'da cbind() fonksiyonunun çalışması için matrislerin satır sayılarının eşit olması gerekir. Farklı olduklarında R ya daha kısa olan girdiyi yeniden kullanır ya da hata verir; bu nedenle her iki nesnenin de dim() fonksiyonunu kullanarak boyutlarını kontrol etmek daha güvenli bir yöntemdir.
cbind() sütunları birleştirirken, rbind() satırları ekler. matrix_c matrisimize bir satır ekleyelim ve boyutunun 5×3 olduğunu doğrulayalım.
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)
Çıktı:
## [1] 5 3
Dikkat edin, add_row gibi adlandırılmış bir vektörü bağlamak, yeni satıra da o adı verir; bu, aşağıda ele alınan etiketli matrislere doğru atılan ilk adımdır.
Bir Matrix'i Dilimleme
Bir matristen bir veya birden fazla eleman seçebiliriz. R programlama Köşeli parantezler [ ] kullanılarak. Parantezlerin içinde önce satır seçici, sonra sütun seçici gelir ve virgülle ayrılır. İşte burada dilimleme devreye giriyor.
Örneğin:
- matris_c[1,2] birinci satır ve ikinci sütundaki elemanı seçer.
- matrix_c[1:3,2:3] ifadesi, 1, 2, 3. satırlarda ve 2 ve 3. sütunlarda verilerin bulunduğu bir R dilim matrisi oluşturur.
- matris_c[,1] ilk sütunun tüm elemanlarını seçer.
- matris_c[1,] ilk satırın tüm elemanlarını seçer.
Virgülün bir tarafını boş bırakmak, o taraftaki tüm değerlerin de dahil edilmesi anlamına gelir. Bunun bir sonucu olarak yeni başlayanlar zorlanır: tek bir satır veya sütun seçildiğinde, R boş boyutu atar ve düz bir vektör döndürür. matrix_c[1, , drop = FALSE] örneğinde olduğu gibi drop = FALSE eklemek, sonucu bir matris olarak tutar.
Yukarıdaki kodların elde ettiği çıktı aşağıdadır
R programlama dilinde bir matrisin satır ve sütunlarını adlandırın.
[,1] ve [3,] gibi varsayılan etiketler, bir matris gerçek bir anlam kazandığı anda çıktıyı okumayı zorlaştırır. dimnames argümanı ve rownames() ve colnames() değiştirme fonksiyonları, daha sonra cbind(), t() ve her dilimleme işlemi boyunca matrisle birlikte taşınan metin etiketleri ekler.
# 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']
| İşlev | Okur | Setler |
|---|---|---|
| boyut adları(m) | Her iki boyut da iki vektörden oluşan bir liste olarak ifade edilir. | boyut adları(m) <- liste(satırlar, sütunlar) |
| satır adları(m) | Satır etiketleri | satır adları(m) <- satırlar |
| sütun adları(m) | Sütun etiketleri | sütun adları(m) <- sütunlar |
| boyut(m) | Satırlar ve sütunlar iki tamsayı olarak. | dim(m) <- c(satır sayısı, sütun sayısı) |
Etiketler oluşturulduktan sonra, sales['north', 'q2'] ifadesi sales[1, 2] ifadesinden çok daha anlaşılır olur ve satırların yeniden sıralanmasından sonra da geçerliliğini korur. Bir dimnames bileşenini NULL olarak ayarlamak, bu etiket kümesini tekrar kaldırır ve as.data.frame() ile dönüştürülen bir matris, satır ve sütun adlarını doğrudan içine taşır. veri çerçevesi.
Matris OperaR'deki İşlevler: Aritmetik, Transpoze ve Çarpma
Matrisler üzerinde aritmetik işlemler, tek tip kuralının işe yaradığı yerdir. Temel R, ek bir pakete gerek kalmadan tüm kümeyi ele alır, ancak iki operatör karıştırılması kolaydır: * eleman elemana çarpar, %*% ise gerçek matris çarpımı gerçekleştirir ve sol işlenenin sütunlarının sağ işlenenin satırlarıyla eşleşmesini gerektirir.
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)Matrisi devrik hale getirir, böylece [i, j] elemanı [j, i] olur. Boyut adları aktarılır.
- çöz(m): Kare, tersinir bir matrisin tersini döndürür ve solve(a, b) doğrusal bir sistemi çözer.
- satır toplamları / sütun toplamları / satır ortalamaları / sütun ortalamaları: Toplama veya ortalama alma işlemleriyle birlikte kullanılan apply() fonksiyonuna eşdeğer olarak belgelenmiştir, ancak çok daha hızlıdır.
- apply(m, MARJIN, FUN)MARGIN = 1 satırları, MARGIN = 2 ise sütunları tarar; bu, belirttiğiniz herhangi bir fonksiyon için geçerlidir.
- teşhis, det, çapraz üretim: Köşegen, determinant ve t(x) %*% y'nin daha hızlı formu.
Bu işlemler vektörleştirildiği için, döngülerin içinde yer almak yerine onların yerini alırlar. Binlerce hücre üzerinde iç içe bir for döngüsü gerektirecek bir özet, tek bir colMeans() çağrısına dönüşür; bu da veriler büyüdükçe önem kazanır.
R'de Matris, Veri Çerçevesi ve Dizi Karşılaştırması
Konsolda matrisler, veri çerçeveleri ve diziler dikdörtgen şeklinde görünse de farklı sorulara cevap verirler. Tablo bunları yan yana göstermektedir.
| Varlığınızı | Matris | Veri çerçevesi | Dizi |
|---|---|---|---|
| boyutlar | Tam olarak 2 | Tam olarak 2 | Herhangi bir numara |
| Sütun tipleri | Nesnenin tamamı için tek tip | Her sütun için farklı bir tür | Nesnenin tamamı için tek tip |
| İle inşa edildi | matris() | veri.çerçevesi() | dizi() |
| Tipik kullanım | Sayısal hesaplama ve doğrusal cebir | Karışık gözlemsel veriler | Yıllara göre sayılar gibi yığılmış tablolar |
| Satır etiketleri | İsteğe bağlı boyut adları | Satır adları her zaman mevcuttur. | İsteğe bağlı boyut adları |
# 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')
Her hücre aynı türde sayı içeriyorsa ve işlem aritmetik ise matrislere başvurulur. veri çerçevesi Sütunlar farklı türler taşıdığında, örneğin sayısal bir fiyatın yanında bir karakter adı ve bir başka karakter adı gibi. faktör. Uzat bir liste Parçaların uzunlukları farklı olduğunda ve zaman veya bölge gibi üçüncü bir indeksin gerçekten var olduğu bir dizi için bu durum geçerlidir. as.matrix() ve as.data.frame() ile her iki yöndeki dönüşüm de ucuzdur, bu nedenle yapı, görevi takip edebilir, tersi değil.




