76
pazuRrry
Typy y.iniimnycli i operacje na nich
77
diagO jest macierz diagonalna z elementami wektora argumentu na przekątnej i zę-'| rami poza. W tabeli 2.4 przedstawiono przydatne funkcje do wykonywania operacji® na kolumnach i wierszach macierzy oraz na całych macierzach.
Tabela 2.4: Funkcje do operacji na macierzach lub ich wierszach/kolumnach
qr(base) |
Funkcja do wyznaczania dekompozycji QR macierzy. |
eigen(base) |
Funkcja do wyznaczania wartości własnych i wektorów włą- i snych macierzy. |
svd(base) |
Funkcja do wyznaczania dekompozycji SVD macierzy. |
det(base) |
Funkcja do wyznaczania wyznacznika zadanej macierzy. j |
upper.tri(base) |
Wynikiem funkcji są indeksy elementów znajdujących się ] powyżej przekątnej macierzy. |
lower.tri(base) |
Wynikiem funkcji są indeksy elementów znajdujących się poniżej przekątnej macierzy. |
solve(base) |
Funkcja do wyznaczania odwrotności macierzy. |
t(base) |
Wykonuje transpozycje macierzy (używając języka potocznego, zamienia kolumny z wierszami). |
colSums(base) |
Wyznacza wektor z sumami elementów w każdej kolumnie. |
rowSums(base) |
Wyznacza wektor z sumami elementów w każdym wierszu. |
colMeans(base) |
Wyznacza wektor ze średnimi elementów w każdej kolumnie. |
rowMeans(base) |
Wyznacza wektor ze średnimi elementów w każdym wierszu. |
rowsum(base) |
Jeżeli pierwszy argument tej funkcji jest macierzą o wymiarach n x m a argument drugi argument jest wektorem n elementowym o wartościach typu czynnikowego o k poziomach, to funkcja rowsumO dla każdej kolumny z wejściowej macierzy wyznacza sumy elementów pogrupowanych przez czynniki zmiennej grupującej. Wynikiem jest więc macierz wymiaru k x m. |
Przypisując elementy do macierzy lub wektora nie musimy podawać ty- i — lu wartości ile pól chcemy zmienić. Przy przypisywaniu obowiązuje tzwl|
/•> zasada recycling rule. Najprościej rzecz ujmując, aby wypełnić x pól i n macierzy lub wektora możemy podać y wartości, pod warunkiem, że ife jest wielokrotnością'y. Przykładowo, jeżeli chcemy zmienić sześć pól w wektorze lub macierzy, to możemy podać po prawej stronie operatora przypisania wektor sześció-elementowy, trójelementowy, dwu- lub jednoelementowy. Krótszy wektor zostanie ^ zwielokrotniony tyle razy ile potrzeba, by wypełnić wszystkie wskazane pola. Poni-:> żej przedstawiamy kilka przykładów wykorzystania zasady recycling rule..
I
> # recycling rule działa1, dodajemy wektor JO~elementowy do 2-elementowejSfi
Cl] 2 4 4 6 6 8 8 10 10 12
> macierz = matrłx(0,2,3> >.||
> # a teraz kilka przykładów na macierzach, wypełnijmy całą macierz .-fg§§
> (macierz[] = 1:6) •'••Si
3 5 i -m
iy # krótsze wektory zostaną zreplikowanc .(oacierzU =1:3)
2,1 2 1 3
'(macierz □ = 1:2)
C, 13 t,23 t,33
1
2
1)
C * 33
i l
Bardzo przydatnymi funkcjami do operowania na dużych macierzach są funkcje kronecker(base) (funkcja wyznaczająca iloczyn Kroneckera dwóch macierzy) oraz óuter(base) (przy domyśluych argumentach funkcja ta mnoży macierzowo dwie macierze). Funkcja outerO ma znaczne możliwości, może być wykorzystana np. do generowania siatek argumentów. Wywołanie funkcji outer(obil, obi2, fun) powoduje wykonanie funkcji fun dla każdej kombinacji elementów zmiennej obił z elementami zmiennej obi2 (zmienne obił i obi2 mogą być wektorami lub macierzami). Poniżej przedstawimy kilka przykładów użycia tej funkcji.
v>,? konstruujemy macierz, której elementy są iloczynem współrzędnych > outer(1:4,1:4)
c.13 c.23 c»3] [,43
2
4
6
8
3
6
9
12
4
8
12
16
> P konstruujemy macierz, której elementy równe są indeksowi wiersza V buter(l:4,1:4, fuaction(x,y) x)
1111 2 2 2 2
> * tworzymy napisy składające się z litery, znaku * i cyfry, wszystkie
kombinacje
: puter(ietters[l:4], 1:5, pastę, sep="*")
j4 |
C,13 |
C,23 |
1,3] |
C.4] |
C,5] |
,tl,] |
" a* 1" |
"a*2'' |
"a*3" |
"a*4" |
"a*5 |
, (2J |
"b*2" |
"b*3" |
"b*4" |
"b*5 | |
l3 , ] |
" c* 1" |
”c»2" |
"c*3" |
"c*4" |
"c*5 |
■ f 4 3 |
"d*!" |
"d*2" |
"d*3 " |
"d*4" |
"d*5 |
Funkcję outerO można też wykorzystać do wygenerowania wszystkich kombinacji poziomów dla zmiennych czynnikowych, l iii sunie elekt można uzyskać też funkcją expand.grid(base). Wynikiem tej funkcji jest, macierz, której wiersze zawierają wszystkie kombinacje zmiennych wskazanych jako argumenty tej funkcji.
Jak? To pytanie czytelnik może potraktować jako zadanie.