80 pHzuRrry
(tab2 - data.frame(klasa « c("IA", "IB"), wychowawca • c("J Kowalski",
"B Nowak"), profil ■ c("mat-fiz", "bio-chem"))) klasa wychowawca profil IA J Kowalski mat-fiz IB B Nowak bio-chem # sklejamy obie ramki łącząc obiekty o identycznych wartościach kolumny| klasa
merge(tabl, tab2) klasa uczeń wychowawca profil
Nie wiem ile maksymalnie wymiarów może mieć macierz. O ile pamiętam w Javie jest ograniczenie do 256 wymiarów, jednak trudno mi wyobrazić sobie efektywne korzystanie z macierzy o kilkunastu wymiarach, pomijając już fakt, że taka macierz najpewniej nie zmieściłaby aię w pamięci operacyjnej.
1 |
IA |
Ala J |
Kowalski |
mat-fiz |
2 |
IB |
Ola |
B Nowak |
bio-ćhem |
3 |
IB |
Ela |
B Nowak bio-chem | |
4 |
IB |
Ula |
B Nowak |
bio-ęhem |
Wymiar macierzy nie jest ograniczony do dwóch. Możemy tworzyć i korzystać'' z macierzy o praktycznie dowolnym wymiarze. Jedynym problemem dla dużych ma-J cierzy jest trudność ich wypisywania na ekranie. Poniżej przedstawiamy przykład tworzenia i operacji na macierzy o 4 wymiarach. Na takiej macierzy można równie: operować funkcji! apply O.
> $ wypełniamy czterowymiarouią macierz 3x3x3x3 losowymi wartościami
> macierz =■ matrix(rimif (3~4))
> dim(macierz) * c(3,3,3,3)
> # zobaczmy dwuwymiarowe przecięcie tej macierzy
> macierz[1,i,,]
C,l] C.2] C.3]
[i,] 0.5421688 0.9960112 0.8526290 [2,] 0.6184002 0.4275497 0.4427460 [3,] 0.9981847 0.7094703 0.8201444
> macierz[1,1,,1] « c(2,3,4)
> # wyznaczmy maksimum elementów w odpowiednich podmacierzach
> apply(macierz,1,max)
Cl] 4.0000000 0.9596400 0.9759735
> apply(macierz,c(l,3),max)
[1,] 2.0000000 3.0000000 4.0000000 [2,] 0.9180873 0.7836242 0.9596400 C3,] 0.7252060 0.9285664 0.9759735 ,
^ J / Macierz o więcej niż dwóch wymiarach jest obiektem klasy array a nie —.matrix. Dla użytkownika nie ma różnicy w sposobie korzystania z takich?
macierzy, dlatego nie rozróżnialiśmy tych dwóch klas w prezentowany!
# powyżej opisach.
Wielowymiarowe macierze tworzy się albo używając funkcji dimO (przykl powyżej) albo używając konstruktora array(base). Przykładowo wywołanie: array (data, dim) utworzy macierz o wymiarach opisanych wektorem dim zaini ejowaną wartościami z argumentu data.
Typy /.nuctinych i operacje na nich
W tabeli 2.5 przedstawiamy listę funkcji, które można wykonać na obiektach dowolnego typa. Służą one najczęściej do weryfikacji oraz zmiany wybranych właściwości lub treści zadanych obiektów. Poniżej przedstawiamy przykłady wykorzystania wybranych funkcji.
tfóbela 2.5: Funkcje z pakietów ułils i bose sprawdzające lub zmieniające właściwości Obiektów
fix(obiekt) |
Funkcja otwiera okno edytora i pozwala na zmianę wartości zmiennej obiekt. W ten sposób możemy łatwo zmodyfikować wartość zmiennej, funkcji lub ramki danych. Szczególnie 1 przydatne jest to polecenie do modyfikacji wartości funkcji (nie musimy wklejać całego kodu funkcji od początku) oraz j tabel danych (modyfikacja wartości wybranych pól jest dużo wygodniejsza). |
class(obiekt) |
Wynikiem tej funkcji jest nazwa klasy obiektu. Nazwę klasy obiektu można dowolnie modyfikować nie zmieniając treści. |
unclass(obiekt) |
Wynikiem jest wartość obiektu obiekt z usuniętym atrybutem class. Usuwane są poprzednie zmiany wykonane funkcją class O. |
typeof(obiekt) |
Wynikiem tej funkcji jest nazwa typu zmiennej. |
modę(obiekt) |
Wynikiem tej funkcji jest iuformacja o sposobie przechowywania obiektu. W większości przypadków wyniki będą takie jak dla funkcji typeof O, z wyjątkiem typów, które mają identyczną reprezentacje wewnętrzną (np. zarówno typ „double” jak i „integer” są przechowywane jako liczba, a wiec mają reprezentacje „uumeric") . |
attributes(obiekt) |
Wynikiem tej funkcji jest lista atrybutów danego obiektu. Z użyciem tej funkcji możliwe jest też modyfikacja tych atrybutów. |
attr(obiekt, atrybut) |
Wyświetla wartość wybranego atrybutu danego obiektu, pozwala też na zmianę jego wartości. |
object.size(obiekt)Wynikiem tej funkcji jest liczba bajtów pamięci zajmowanych przez wskazany obiekt. | |
str(obiekt) l_ |
Wynikiem tej funkcji jest informacja o strukturze danego obiektu (nazwach i rozmiarach poszczególnych atrybutów, zmiennych itp). |
># zobaczmy czym różni się typ od klasy na przykładzie klasy factor
> (imię = f ąct©r("Karolina"))
[1] Karoliną
Levels: Karolina
> class(imię)
-v.U3- "factor*1'"’ ^ v
;> raode(imię)
‘'numeric"
'> typeof(iraie)
■ W "integer"