Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyVýpočetní matematické systémy Výuka jazyka R Matice a pole Základní příkazy, tvorba matic a polí

Logo Matematická biologie

Základní příkazy, tvorba matic a polí

Matice je 2-dimenzionální datová struktura, která se skládá z řádků a sloupců. Stejně jako vektory, všechny prvky matice musí být stejného datového typu (numerický, komplexní, logický nebo textový), mohou rovněž obsahovat prvky s hodnotami NA, NaN, NULL nebo Inf. Pole je k-dimenzionální struktura, matice je jejím speciálním typem pro k = 2.

Základním způsobem k vytvoření matice nebo pole je použít příkazy matrix(), popř. array():

> u <- 1:20
> matrix(u, 4, 5)    vytvoří matici o 4 řádcích a 5 sloupcích, prvky jsou skládány po sloupcích

 
[,1]
[,2]
[,3]
[,4]
[,5]
[1,]
1
5
9
13
17
[2,]
2
6
10
14
18
[3,]
3
7
11
15
19
[4,]
4
8
12
16
20

> matrix(u, 4, 5, byrow=TRUE)    vytvoří matici 4 x 5, argument byrow=TRUE stanovuje, že prvky jsou skládány po řádcích

 
[,1]
[,2]
[,3]
[,4]
[,5]
[1,]
1
2
3
4
5
[2,]
6
7
8
9
10
[3,]
11
12
13
14
15
[4,]
16
17
18
19
20

 

Poznámka. V případě, že je vektor u kratší než je počet prvků matice, při vytváření matice je uplatněno pravidlo recycling rule. Pravidlo spočívá v opakování složek vektoru u tak dlouho, dokud jeho délka nedosáhne počtu prvků matice.

Pro definování polí slouží příkaz array(), s nímž je práce analogická.

> (ar <- array(u, c(2, 5, 2)))    vytvoří pole o rozměrech 2 x 5 x 2

 
,,1          
 
[,1]
[,2]
[,3]
[,4]
[,5]
[1,]
1
2
3
4
5
[2,]
6
7
8
9
10
,,2          
[1,]
11
12
13
14
15
[2,]
16
17
18
19
20

 

Dalším způsobem, jak vytvořit matice, popř. pole je příkaz dim(), který vektor ve svém argumentu uspořádá po sloupcích do pole požadované dimenze.

> u <- 1:20
> dim(u) <- c(4, 5)    vektoru u stanoví dimenzi - 4 řádky, 5 sloupců
> u

 

 
[,1]
[,2]
[,3]
[,4]
[,5]
[1,]
1
2
3
4
5
[2,]
6
7
8
9
10
[3,]
11
12
13
14
15
[4,]
16
17
18
19
20

 

Příkazy matrix(u, ncol=5), matrix(u, nrow=4), matrix(u, 4) a matrix(u, c(4, 5)) jsou ekvivalentní, všechny seskládají po sloupcích vektor u do pěti sloupců a čtyř řádků.

Pro zjištění velikosti matice či pole slouží funkce dim(). Výstupem je vektor, jehož první složka udává počet řádků, druhá udává počet sloupců a v případě polí odkazují další složky na příslušné dimenze. Pro zjištění počtu řádků či sloupců matic i polí slouží rovněž funkce nrow() či ncol().

> dim(u)
[1]    4    5
> dim(ar)
[1]    2    5    2
> nrow(ar)
[1]   2
> ncol(ar)
[1]    5
V systému MATLAB lze funkcí size() získat rozměry matice, pole i vektoru. Analogickou funkcí pro size() je v jazyce R funkce dim(), tu ovšem nemůžeme použít pro zjištění délky vektoru. Funkcím nrow(x) a ncol(x) odpovídají v MATLABu funkce size(x,1) a size(x,2).

Názvy řádků a sloupců mohou být specifikovány argumentem dimnames. Jedná se o argument typu seznam (pro více podrobností viz výuková jednotka Datové tabulky a seznamy) o dvou složkách - textových vektorech obsahujících názvy jednotlivých řádků a sloupců.

> matrix(u, ncol=5, dimnames=list(c("r1", "r2", "r3", "r4"), c("sl1", "sl2", "sl3", "sl4",

+ "sl5")))

 
s11
s12
s13
s14
s15
r1
1
5
9
13
17
r2
2
6
10
14
18
r3
3
7
11
15
19
r4
4
8
12
16
20

Dalšími příkazy pro tvorbu matic mohou být cbind() nebo rbind(), které své argumenty skládají vertikálně (po sloupcích) nebo horizontálně (po řádcích). Argumenty mohou být vektory libovolných délek a/nebo matice se stejným počtem řádků nebo sloupců.

> cbind(1:3, 4:6)

 
[,1]
[,2]
[1,]
1
4
[2,]
2
5
[3,]
3
6

> cbind(matrix(1:4, c(2, 2)), matrix(c(8, 11), c(2, 1)))

 
[,1]
[,2]
[,3]
[1,]
1
3
8
[2,]
2
4
11

> rbind(1:8, 1:5)    v případě, že vektory nejsou stejné délky, složky kratšího vektoru se opakují tak dlouho, dokud nedosáhne rozměru delšího vektoru

 
[,1]
[,2]
[,3]
[,4]
[,5]
[,6]
[,7]
[,8]
[1,]
1
2
3
4
5
6
7
8
[2,]
1
2
3
4
5
1
2
3

Warning message:
In rbind(1:8 1:5) :
number of columns of result is not a multiple of vector length (arg 2)

Argument nazev.vektoru=vektor slouží k pojmenování jednotlivých řádků (v případě rbind) a sloupců (v případě cbind):

> cbind(sl1=1:3, sl2=4:6)

 
s11
s22
[1,]
1
4
[2,]
2
5
[3,]
3
6
Na rozdíl od MATLABu nelze v jazyce R matici o jednom sloupci získat transpozicí vektoru (funkce t()), je třeba použít jeden z příkazů matrix(), dim() nebo rbind().

 

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity