Obiekty macierzy klas są macierzami złożonymi z elementów jednego z trybów atomowych, z wyjątkiem NULL, lub listy trybów lub wyrażeń. Trzy funkcje matrix(), as.matrix() i is.matrix() istnieją i zachowują się podobnie do funkcji trybów atomowych. Funkcja matrix() tworzy macierz. Funkcja przyjmuje pięć możliwych argumentów. Pierwszy argument jest obiektem trybu atomowego, listy lub wyrażenia. Drugi argument to nrow, liczba wierszy. Trzecim argumentem jest ncol, liczba kolumn. Czwarty argument to byrow, który mówi R, aby utworzyć macierz przechodzącą przez wiersze zamiast w dół kolumn. Wartość domyślna to FALSE. Argument byrow jest przydatny do skanowania tabelarycznych danych atomowych do macierzy. Piąty argument to dimnames, który przypisuje nazwy do wierszy i kolumn w wywołaniu funkcji matrix (). Domyślna wartość dla dimnames to NULL. Korzystając z tablicy a z sekcji dotyczącej wektorów, wykonaj dwa przykłady tworzenia macierzy:
mac.PNG
i
mac2.PNG
Zauważ, że R daje ostrzeżenie, jeśli iloczyn liczby wierszy i kolumn nie jest wielokrotnością liczby elementów w pierwszym argumencie. Komunikat ostrzegawczy nie wpływa na wynik. Dla trybów atomowych, jeśli podano tylko pierwszy argument, R tworzy macierz z liczbą wierszy równą liczbie elementów w obiekcie i liczbą kolumn równą jeden. Jeśli podano tylko nrow lub ncol, R tworzy macierz z obiektu w pierwszym argumencie z podaną liczbą wierszy lub kolumn, wypełniając tyle kolumn lub wierszy, ile potrzeba, aby wykorzystać wszystkie elementy w pierwszy argument – w razie potrzeby jazda na rowerze. Jeśli obecne są zarówno nrow, jak i ncol, R przejdzie przez elementy pierwszego argumentu, aż do zapełnienia macierzy, cyklicznie w razie potrzeby. Argument byrow może służyć do przełączania pierwszego argumentu między wierszami zamiast w dół kolumn. Dla obiektów trybu listy, matrix () tworzy macierz, która opisuje zawartość każdego elementu najwyższego poziomu listy. Opis podaje tryb elementu i jego rozmiar. Jeśli element listy nie jest w trybie legalnym, to? jest umieszczony w komórce matrycy. Odwołanie do komórek w macierzy zwraca zawartość listy dla komórki. Poniższy kod podaje przykład:
> a.list = list(matrix(1:4,2,2), c(“abc”,”cde”), 1:3, c.fun)
> a.list
[[1]]
[,1] [,2]
[1,] 1 3
[2,] 2 4
[[2]]
[1] “abc” “cde”
[[3]]
[1] 1 2 3
[[4]]
function ()
print(1:5)
> matrix(a.list,2,2)
[,1] [,2]
[1,] Integer,4 Integer,3
[2,] Character,2 ?
> matrix(a.list,2,2)[2,2]
[[1]]
function ()
print(1:5)
Obiekty trybu epression są legalne dla matrix(), ale wynik wygląda jak macierz. W zależności od liczby podanych kolumn i / lub wierszy argumenty w wyrażeniu zostaną zduplikowane. Funkcja as.matrix() próbuje wymusić obiekt na macierzy klas i jest używana głównie w przypadku data.frames. Jeśli argument as.matrix() może zostać wymuszony na wektorze i nie jest matrycą ani ramką danych, to as.matrix() tworzy macierz jednokolumnową elementów wymuszonych. Tryb to macierz. Jeśli obiekt jest macierzą, as.matrix() po prostu zwraca macierz i zachowuje nazwy wierszy i kolumn. Jeśli obiektem jest data.frame, to as.matrix() wymusza data.frame na macierz. (Data.frame jest specjalnym rodzajem listy, dla której wszystkie elementy mają tę samą długość i mają tryby atomowe.) Jeśli w data.frame znajduje się kolumna zawierająca dane znakowe lub dane surowe, wówczas całe dane .frame jest zmuszony do postaci. W przeciwnym razie ramka danych jest przymuszana do macierzy logicznej, jeśli wszystkie kolumny są logiczne, do macierzy liczb całkowitych, jeśli kolumna liczb całkowitych jest obecna, ale nie ma kolumn liczbowych lub złożonych, do macierzy liczbowej, jeśli kolumna liczbowa jest obecna i brak złożonych kolumn, a do złożonej macierzy, jeśli występuje złożona kolumna. Ramki danych można również konwertować na macierz za pomocą funkcji data.matrix(). Funkcja data.matrix() konwertuje ramkę danych na macierz, zmuszając wszystkie elementy w ramce danych do liczbowej. W przypadku złożonych elementów część urojoną odrzuca się. Funkcja wymusza kolumny znaków na NA i współczynniki kolumn na liczby całkowite, zaczynając od 1. (Gdy tworzona jest ramka danych, kolumny znaku trybu są domyślnie zmieniane na czynniki. Zobacz rozdział data.frame(), aby dowiedzieć się, jak data.frame() może obsługiwać kolumny znaków trybu). Poniższy przykład pokazuje wyniki dla as.matrix() i data.matrix(), używając data.frame o nazwie a.df:
> a.df = data.frame(c(“a”,”a”),1:2,c(F,T),1:2+.5,1:2+7i)
> dimnames(a.df) = list(c(“1″,”2”),c(“char”, “int”, “log”, “doub”, “comp”))
> a.df
char int log doub comp
1 a 1 FALSE 1.5 1+7i
2 a 2 TRUE 2.5 2+7i
> mode(a.df)
[1] “list”
> class(a.df)
[1] “data.frame”
> as.matrix(a.df)
char int log doub comp
[1,] “a” “1” “FALSE” “1.5” “1+7i”
[2,] “a” “2” ” TRUE” “2.5” “2+7i”
>
> as.matrix(a.df[,2:5])
int log doub comp
[1,] 1+0i 0+0i 1.5+0i 1+7i
[2,] 2+0i 1+0i 2.5+0i 2+7i
> class(a.df[,1])
[1] “factor”
> data.matrix(a.df)
char int log doub comp
[1,] 1 1 0 1.5 1
[2,] 1 2 1 2.5 2
Warning message:
In data.matrix(a.df) : imaginary parts discarded in coercion
Funkcja is.matrix() sprawdza, czy obiekt ma macierz klas. Funkcja zwraca PRAWDA, jeśli klasą argumentu jest macierz, w przeciwnym razie FALSE. Jeśli obiekt trybu i wyrażenia klasy zostanie użyty do utworzenia macierzy lub zostanie przymuszony do macierzy, wynik będzie miał macierz klasy, nawet jeśli struktura wyniku nie jest podobna do macierzy. Więcej informacji na temat matrix(), as.matrix() i is.matrix() można znaleźć, wprowadzając? Matrix po znaku zachęty R. Więcej informacji na temat data.matrix() można znaleźć, wprowadzając ?data.matrix w wierszu polecenia R.