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.

  • 🧩 Yapısı: Bir matris, boyut özelliğine sahip bir vektördür, bu nedenle her hücrenin aynı veri türünü paylaşması gerekir.
  • Oluşturma: matrix(data, nrow, ncol, byrow) bir diziyi düzenler ve R eksik boyutu çıkarır.
  • 🔄 Siparişi doldurun: byrow = FALSE sütun sütun doldururken, byrow = TRUE satır satır doldurur.
  • Büyüme: cbind() sütunları, rbind() ise satırları birleştirir; bunun için paylaşılan boyutun eşleşmesi gerekir.
  • Dilimleme: m[satır, sütun] önce satırları okur ve boş bir taraf, o taraftaki her şeyi seçer.
  • ???? ️ Etiketler: `dimnames`, `rownames()` ve `colnames()` fonksiyonları [,1] yer tutucularını okunabilir adlarla değiştirir.
  • ➕➖ Aritmetik: Yıldız işareti (*) eleman eleman çarpmayı gerçekleştirirken, %*% matris çarpımını gerçekleştirir.

R'de Matris Fonksiyonu: Oluşturma, Yazdırma, Sütun Ekleme ve Dilimleme

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 bir matris fonksiyonunun satır ve sütun düzeni.

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.

byrow = TRUE parametresiyle satır satır doldurulmuş matrix_a matrisinin konsol çıktısı

Ş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ı:

byrow = FALSE ile sütun sütun doldurulmuş matrix_b'nin konsol çıktısı

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'de dört matris dilimleme ifadesinin konsol çıktısı.

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.

SSS

R, değerleri reddetmek yerine geri dönüştürür, bu nedenle matrix(1:3, nrow = 2, ncol = 3) diziyi tekrarlar. Yalnızca uzunluk hücre sayısının tam katı olmadığında bir uyarı görünür; bu da sessiz geri dönüşümü gözden kaçırmayı kolaylaştıran bir hata haline getirir.

Negatif bir indeks kullanın: m[-2, ] ikinci satırı, m[, -3] ise üçüncü sütunu siler. m[-c(1, 4), ] ile birden fazla satır aynı anda silinebilir. Sonuç geri atanana kadar orijinal nesne değişmeden kalır.

Tek bir satır veya sütun seçmek, varsayılan olarak boş boyutu siler. Tek satırlı bir matris tutmak için m[1, , drop = FALSE] gibi drop = FALSE ekleyin. Bu, sonucun iki boyut bekleyen bir fonksiyona iletilmesi durumunda önemlidir.

`which(m == value, arr.ind = TRUE)` ifadesi, her eşleşmenin satır ve sütununu veren iki sütunlu bir sonuç döndürür. `arr.ind` olmadan, cevap sütunlar boyunca sayılan tek bir doğrusal dizindir ki bu nadiren istediğiniz şeydir.

array(data, dim = c(rows, columns, layers)) kullanın veya dim(x)'i doğrudan bir vektöre atayın. Dilimleme daha sonra her boyut için bir indeks alır, örneğin a[2, 3, 1]. Bir matris, bir dizinin iki boyutlu halidir.

Evet. Temel R referansında, rowSums ve colMeans fonksiyonlarının, sum veya mean ile apply() fonksiyonuna eşdeğer olduğu ancak çok daha hızlı olduğu ve her ikisinin de açık bir for döngüsünden daha iyi olduğu belirtiliyor; çünkü yineleme yorumlayıcıda değil, derlenmiş kodda gerçekleşiyor.

Model uyarlama doğrusal cebirdir: özellikler bir matris oluşturur, katsayılar bir vektör oluşturur ve tahmin tek bir %*% çarpımıdır. Birçok makine öğrenme Bu nedenle paketler, girdi olarak veri çerçevesi yerine sayısal bir matris gerektirir.

Evet. GitHub Yardımcı Pilotu RStudio 2023.09.0 ve sonraki sürümlerinde çalışır ve açık dosyadaki yorumlardan kod tamamlama işlemini gerçekleştirir. Boyutlandırma mantığını inceleyin. RStudioÇünkü yanlış bir satır sayısı bile geçerli bir matris üretir.

Bu yazıyı şu şekilde özetleyin: