
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, byrow=TRUE) vytvoří matici 4 x 5, argument byrow=TRUE stanovuje, že prvky jsou skládány po řádcích
|
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
|
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
|
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")))
|
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)
> cbind(matrix(1:4, c(2, 2)), matrix(c(8, 11), c(2, 1)))
> 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
Warning message: |
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)
|
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().
|