Werken met R bij wiskunde: Lineaire algebra in R
Selectie van componenten van matrices en toewijzing van waarden
Selectie van componenten en deelmatrices Je kunt op verschillende manieren componenten van matrices selecteren. We geven een paar voorbeelden, waaruit blijkt dat indexering begint bij (1, 1) en er slimme manieren zijn om deelmatrices te creëren. Het allerlaatste commando uit onderstaande sessie illustreert dat je in R een matrix ook kan opvatten als een kolomvector verkregen door alle kolommen van links naar rechts onder elkaar te zetten; je kunt daarom ook met één index een element aanwijzen.
> M <- matrix(2:13, nrow=3, byrow=TRUE); M
[,1] [,2] [,3] [,4]
[1,] 2 3 4 5
[2,] 6 7 8 9
[3,] 10 11 12 13
> M[2,3] # een enkel element
[1] 8
> M[,3] # derde kolom
[1] 4 8 12
> M[1,] # eerste rij
[1] 2 3 4 5
> M[1,2:4] # eerste rij, alles behalve eerste kolom
[1] 3 4 5
> M[1:2,1:2] # deelmatrix
[,1] [,2]
[1,] 2 3
[2,] 6 7
> M[6] # selectie van component door matrix als kolomvector te lezen
[1] 11
Selectie via logische expressies Je kunt ook logische indexering (met nullen en enen) gebruiken om elementen van matrices te selecteren. Hiervoor heb je relationele operatoren nodig, zoals uit onderstaande tabel. Behalve logische indexering kan je ook de which
instructie gebruiken om geschikte indices bij een logische uitdrukking op te sporen
== | gelijk aan | ~= | niet gelijk aan |
< | kleiner dan | > | groter dan |
<= | kleiner dan of gelijk aan | >= | groter dan of gelijk aan |
> M <- matrix(2:13, nrow=3, byrow=TRUE); M
[,1] [,2] [,3] [,4]
[1,] 2 3 4 5
[2,] 6 7 8 9
[3,] 10 11 12 13
> M>7 # matrixwaarden TRUE als aan de voorwaarde voldaan is en anders FALSE
[,1] [,2] [,3] [,4]
[1,] FALSE FALSE FALSE FALSE
[2,] FALSE FALSE TRUE TRUE
[3,] TRUE TRUE TRUE TRUE
> M[M>7] # selectie van componenten
[1] 10 11 8 12 9 13
> which(M<8) # selectie van indices (kolomsgewijs) via which functie
[1] 1 2 4 5 7 10
> M[.Last.value] # kolomsgewijze selectie van componenten
[1] 2 6 3 7 4 5
Toewijzing Componenten waar je naar refereert kun je ook een waarde toewijzen
> M[3,4] <- 17; M [,1] [,2] [,3] [,4] [1,] 2 3 4 5 [2,] 6 7 8 9 [3,] 10 11 12 17 > M[,4] <- 1; M # enkel matrixelement gewijzigd [,1] [,2] [,3] [,4] [1,] 2 3 4 1 [2,] 6 7 8 1 [3,] 10 11 12 1 > M[,4] <- 1; M # alle elementen in de vierde kolom gelijk aan 1 geteld [,1] [,2] [,3] [,4] [1,] 2 3 4 1 [2,] 6 7 8 1 [3,] 10 11 12 1 > M <- M[-1,]; M # eerste rij verwijderd [,1] [,2] [,3] [,4] [1,] 6 7 8 9 [2,] 10 11 12 13 > M[,] <- 0; M # alle elementen gelijk aan 0 gesteld [,1] [,2] [,3] [,4] [1,] 0 0 0 0 [2,] 0 0 0 0
Vormverandering Je kunt uitgaande van een vector of matrix ook de vorm veranderen. Onderstaande twee voorbeelden illustreren dit.
> v <- 1:6; v # vector van lengte 6
[1] 1 2 3 4 5 6
> A <- matrix(v, nrow=3); A # 3x2 matrix
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> B <- matrix(A, nrow=2); B # 2x3 matrix
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> t(B) # getransponeerde van matrix B
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6