10 Kreiranje matrice

Matrice su dvodimenzionalni vektori (dakle, vrijede isti uvjeti kao i za vektore), a mogu se kreirati na više načina. Matricu je uobičajeno definirati koristeći funkciju matrix(), u kojoj je potrebno navesti podatke, broj stupaca i broj redaka. Osim toga, može se definirati način slaganja elemenata u matricu, zadano (engl. default) je slaganje po stupcu, a može se definirati slaganje po recima unosom byrow=TRUE. Podaci se mogu kreirati, a može se koristiti uvezeni skup podataka (engl. dataset) (npr. ako se uvezeni dataset zove Analiza, tada je data=Analiza, kasnije će biti više riječi o tome).

10.1 Kreiranje matrice koristeći izravan upis elemenata

Ukoliko postoje specifični elementi koje je potrebno upisati u matricu točno određenim redom, onda kreiranje matrice može biti napravljeno na sljedeći način:

Mat <- matrix(c(5,6,8,
                10,11,15,
                2,7,3,
                12,28,19,
                13,22,24,
                31,25,8),
              ncol = 3, byrow = TRUE)
Mat
##      [,1] [,2] [,3]
## [1,]    5    6    8
## [2,]   10   11   15
## [3,]    2    7    3
## [4,]   12   28   19
## [5,]   13   22   24
## [6,]   31   25    8

Pri definiranju matrice, koristi se naredba matrix(). Prvi parametar funkcije su podaci temeljem kojih se kreira matrica. Ako se podaci unose ručno, potrebno ih je unijeti kao vektor, koristeći funkciju c(). Potom je potrebno definirati broj redaka i/ili stupaca. Dovoljno je definirati samo jedno (broj redaka ili broj stupaca), ali se može definirati oboje. Potom je potrebno definirati parametar byrow. To je logički parametar koji je unaprijed zadan (engl. default) na FALSE i kao takav uvjetuje da će podaci biti očitani po stupcima, a ne po recima. Ako je definirano byrow = TRUE, tada će podaci biti očitani i zapisani u matricu po recima. Ovaj se pristup češće koristi s obzirom da je ljudima uglavnom prirodnije čitati i upisivati podatke po recima nego po stupcima.

Ako ne bismo koristili postavku byrow = TRUE, tada se automatski podrazumijeva upotreba byrow = FALSE i očitavanje i zapis podataka u matricu po stupcima. Sljedeći primjer pokazuje upravo takvu situaciju. Obratite pozornost na to da u zapisu niže također koristimo manje pregledan zapis podataka. To znači da pri kreiranju matrica zapravo nije potrebno svaki redak ili stupac buduće matrice pisati u zaseban redak i R će očitati podatke neovisno o zapisu. U pravilu, zapis nalik na prethodni primjer koristimo radi preglednosti koda i lakše provjere.

Mat <- matrix(c(5,6,8,10,11,15,2,7,3,12,28,19,13,22,24,31,25,8),ncol = 3)
Mat
##      [,1] [,2] [,3]
## [1,]    5    2   13
## [2,]    6    7   22
## [3,]    8    3   24
## [4,]   10   12   31
## [5,]   11   28   25
## [6,]   15   19    8

Osim toga, ako su u pitanju cjelobrojni redoslijedni elementi, onda matricu možemo kreirati i na sljedeći način:

A<-matrix(data=10:18, nrow=3, ncol=3)
A
##      [,1] [,2] [,3]
## [1,]   10   13   16
## [2,]   11   14   17
## [3,]   12   15   18

10.2 Matrica indeksa

Matrica koja sardži redoslijedne cijele brojeve kao elemente naziva se i matrica indeksa, zbog toga što vrijednosti elemenata odgovaraju rednim mjestima. Takve se matrice ponekad koriste u pomoćnim izračunima.

B<-matrix(data=1:9, nrow=3, ncol=3, byrow=TRUE)
B
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9

10.3 Kreiranje matrice iz vektora

Matrica se može kreirati i temeljem vektora. Kreirajmo malo duži vektor, na primjer,

o <-c(a,j)
o
##  [1]  1  2  3  4  5  5 10 15 20 25  1  2  3  4  5

Da bi se matrica kreirala pomoću vektora, broj elemenata u vektoru mora odgovarati broju elemenata u matrici koja će se kreirati (ovdje ne funkcionira recikliranje). Zbog toga ćemo prvo provjeriti duljinu vektora.

length(o)
## [1] 15

Da bi vektor pretvorili u matricu, potrebno mu je zadati dvije dimenzije, a dimenzije se zadaju pomoću funkcije dim(). U ovom slučaju, duljina vektora je 15, pa možemo kreirati matricu dimenzija, npr. \(3 \times 5\).

dim(o)<-c(3,5)

Već pri sljedećem ispisu moguće je uočiti rezultat primjene dim().

o
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    4   10   25    3
## [2,]    2    5   15    1    4
## [3,]    3    5   20    2    5

Ako je potrebno, tako kreiranoj matrici moguće je pridodati atribute, a nazivi stupaca i redaka mogu se pridružiti kao što je ranije prikazano.

rownames(o)<-c("Prvi", "Drugi", "Treći")
colnames(o)<-c("Stupac 1.", "Stupac 2.", "Stupac 3.", "Stupac 4.", "Stupac 5.")
print(o)
##       Stupac 1. Stupac 2. Stupac 3. Stupac 4. Stupac 5.
## Prvi          1         4        10        25         3
## Drugi         2         5        15         1         4
## Treći         3         5        20         2         5

10.4 Dodjela atributa

Za unos naziva redaka i stupaca mogu se koristiti colnames() i rownames().

C<-matrix(10:18, nrow = 3, ncol = 3, byrow = TRUE)
colnames(C)<-c("A", "B","C")
rownames(C)<-c("1.", "2.", "3.")
C
##     A  B  C
## 1. 10 11 12
## 2. 13 14 15
## 3. 16 17 18

Nazivi stupaca i redaka matrice mogu se unijeti pomoću dimnames.

C<-list(c("Crveno", "Žuto", "Zeleno"), c("Lokacija 1", "Lokacija 2"))
matrix(data=c("DA","NE", "N/a"), nrow=3, ncol=2, dimnames = C)
##        Lokacija 1 Lokacija 2
## Crveno "DA"       "DA"      
## Žuto   "NE"       "NE"      
## Zeleno "N/a"      "N/a"

Obratite pozornost da je ovime prepisana prethodno kreirana matrica C. Treba voditi računa o nazivima vektora i matrica, jer R neće javljati nikakvo upozorenje ako želite promijeniti postojeći vektor ili matricu.