Funkcja macierzowa w R: Utwórz, wydrukuj, dodaj kolumnę i plasterek
⚡ Inteligentne podsumowanie
Matrix w R to dwuwymiarowa tablica zawierająca pojedynczy typ danych w m wierszach i n kolumnach, utworzona za pomocą funkcji matrix(), rozszerzona za pomocą cbind() i rbind(), dostępna za pomocą nawiasów kwadratowych.

Funkcja macierzowa w R
Funkcja macierzowa w R jest dwuwymiarową tablicą zawierającą m wierszy i n kolumn. Innymi słowy, macierz w programowaniu w języku R jest kombinacją dwóch lub więcej wektorów o tym samym typie danych.
Poniżej macierz to po prostu wektor z atrybutem dim o długości dwóch. Dlatego każdy element musi mieć jeden typ: w momencie, gdy wartość znaku łączy się z liczbami, cała macierz jest przekształcana na znak. R przechowuje wartości w jednym przebiegu kolumnowym i używa dim do decydowania, gdzie kończy się każdy wiersz, więc wybór… typ danych dotyczy całego obiektu na raz.
Uwaga: Funkcja matrix() zawsze zwraca dokładnie dwa wymiary. Aby zbudować strukturę z trzema lub więcej wymiarami w R, użyj funkcji array() z wektorem dim lub przypisz funkcję dim() bezpośrednio. Poniższy diagram przedstawia układ wierszy i kolumn każdej macierzy.
Jak utworzyć macierz w R
Możemy utworzyć macierz za pomocą funkcji matryca()Podstawowy podpis R przyjmuje pięć argumentów, a trzy najczęściej używane przedstawiono tutaj:
matrix(data, nrow, ncol, byrow = FALSE)
argumenty:
- dane:Zbiór elementów, które R uporządkuje w wiersze i kolumny macierzy.
- nrów:Liczba wierszy.
- nkol: Liczba kolumn.
- obok: Flaga logiczna. Przy domyślnym ustawieniu byrow = FALSE macierz jest wypełniana kolumna po kolumnie, od góry do dołu. Przy ustawieniu byrow = TRUE macierz jest wypełniana wiersz po wierszu, od lewej do prawej.
- dimnames:Opcjonalna lista o długości dwóch zawierająca nazwy wierszy i nazwy kolumn.
Przed pierwszym przykładem warto poznać dwa szczegóły z odniesienia R bazowego. Jeśli podany jest tylko jeden z argumentów nrow i ncol, R wnioskuje o drugim na podstawie długości danych. A jeśli dane zawierają zbyt mało elementów, aby wypełnić żądany kształt, wartości są ponownie przetwarzane, a nie odrzucane.
Utwórzmy dwie macierze 5×2 z ciągu liczb od 1 do 10, jedną z byrow = TRUE i jedną z byrow = FALSE, aby zobaczyć różnicę.
# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow = TRUE matrix_a <-matrix(1:10, byrow = TRUE, nrow = 5) matrix_a
Wyjście:
Ponieważ użyto byrow = TRUE, konsola wypełnia pierwszy wiersz wartościami 1 i 2, drugi wiersz wartościami 3 i 4 itd.
Wydrukuj wymiar macierzy matrix_a za pomocą dim()
Teraz wydrukujmy wymiar macierzy w R za pomocą dim(). Składnia drukowania macierzy w R za pomocą dim() jest następująca:
# Print dimension of the matrix with dim()
dim(matrix_a)
Wyjście:
## [1] 5 2
dim() najpierw zwraca liczbę wierszy, a potem liczbę kolumn, potwierdzając kształt 5×2.
Wypełnij macierz kolumnami z byrow = FALSE
Te same dziesięć liczb i ten sam rząd tworzą inny układ po zmianie kierunku wypełniania.ping byrow domyślnie wysyła wartości w dół pierwszej kolumny przed rozpoczęciem przetwarzania drugiej.
# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow = FALSE matrix_b <-matrix(1:10, byrow = FALSE, nrow = 5) matrix_b
Wyjście:
Wydrukuj wymiar macierzy_b za pomocą dim()
Ponownie wydrukuj wymiar macierzy za pomocą dim(). Poniżej znajduje się składnia wymiaru matrycy drukującej R:
# Print dimension of the matrix with dim()
dim(matrix_b)
Wyjście:
## [1] 5 2
Kształt pozostaje niezmieniony przy wymiarach 5×2, ponieważ rząd zmienia kolejność wypełniania, a nigdy wymiary.
Note:Użycie polecenia matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) będzie miało taki sam efekt jak powyżej, ponieważ R wnioskuje nrow = 5 z dziesięciu dostarczonych wartości.
Możesz również utworzyć macierz 4×3 za pomocą ncol. R utworzy 3 kolumny i wypełni każdą z nich od góry do dołu. Sprawdź przykład.
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c
Wyjście:
## [,1] [,2] [,3] ## [1,] 1 5 9 ## [2,] 2 6 10 ## [3,] 3 7 11 ## [4,] 4 8 12
Nagłówki kolumn od [,1] do [,3] i etykiety wierszy od [1,] do [4,] to domyślne symbole zastępcze języka R. Znikają one po podaniu rzeczywistych nazw wymiarów, jak pokazano dalej w tym samouczku.
Przykład:
dim(matrix_c)
Wyjście:
## [1] 4 3
Dodaj kolumnę do macierzy za pomocą cbind()
Możesz dodać kolumnę do macierzy R za pomocą polecenia cbind(). cbind() oznacza powiązanie kolumn i umożliwia łączenie dowolnej liczby macierzy lub kolumn. Na przykład, w poprzednim przykładzie utworzyliśmy macierz 5×2. Łączymy trzecią kolumnę i sprawdzamy, czy wymiar wynosi 5×3.
Przykład:
# concatenate c(1:5) to the matrix_a matrix_a1 <- cbind(matrix_a, c(1:5)) # Check the dimension dim(matrix_a1)
Wyjście:
## [1] 5 3
Przykład:
matrix_a1
Wydajność
## [,1] [,2] [,3] ## [1,] 1 2 1 ## [2,] 3 4 2 ## [3,] 5 6 3 ## [4,] 7 8 4 ## [5,] 9 10 5
Przykład:
Możemy również powiązać więcej niż jedną kolumnę naraz. Następny blok tworzy macierz matrix_a2, macierz 4×3 zawierającą liczby od 13 do 24, dzięki czemu można ją połączyć z macierzą 4×3 matrix_c, aby uzyskać wynik 4×6 obejmujący liczby od 1 do 24.
matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)
Wyjście:
## [,1] [,2] [,3] ## [1,] 13 17 21 ## [2,] 14 18 22 ## [3,] 15 19 23 ## [4,] 16 20 24
Przykład:
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)
Wyjście:
## [1] 4 6
UWAGALiczba wierszy macierzy w R musi być równa, aby funkcja cbind() działała. Gdy się różnią, R albo przetwarza krótsze dane wejściowe, albo zgłasza błąd, więc sprawdzenie dim() najpierw dla obu obiektów jest bezpieczniejszym nawykiem.
Podczas gdy cbind() łączy kolumny, rbind() dołącza wiersze. Dodajmy jeden wiersz do naszej macierzy matrix_c i sprawdźmy, czy wymiar wynosi 5×3.
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3) # Create a vector of 3 columns add_row <- c(1:3) # Append to the matrix matrix_c <- rbind(matrix_c, add_row) # Check the dimension dim(matrix_c)
Wyjście:
## [1] 5 3
Należy zauważyć, że powiązanie nazwanego wektora, takiego jak add_row, również nadaje nowemu wierszowi tę nazwę, co jest pierwszym krokiem w kierunku macierzy oznaczonych, omówionych dalej.
Pokrój matrycę
Możemy wybrać jeden lub wiele elementów z macierzy w Programowanie R używając nawiasów kwadratowych [ ]. W nawiasach najpierw pojawia się selektor wiersza, a potem selektor kolumny, rozdzielone przecinkiem. Tu właśnie wkracza do akcji wycinanie.
Na przykład:
- matrix_c[1,2] wybiera element w pierwszym wierszu i drugiej kolumnie.
- matrix_c[1:3,2:3] daje w wyniku macierz wycinków R z danymi w wierszach 1, 2, 3 oraz kolumnach 2 i 3.
- matrix_c[,1] wybiera wszystkie elementy pierwszej kolumny.
- matrix_c[1,] wybiera wszystkie elementy pierwszego wiersza.
Pozostawienie jednego boku przecinka pustego oznacza zatem, że wszystkie wartości po tej stronie pozostaną puste. Początkujący mogą się pogubić w jednej konsekwencji: po zaznaczeniu pojedynczego wiersza lub kolumny R pomija pusty wymiar i zwraca zwykły wektor. Dodanie drop = FALSE, jak w matrix_c[1, , drop = FALSE], powoduje, że wynik pozostaje macierzą.
Oto wynik uzyskany dla powyższych kodów
Nazwij wiersze i kolumny macierzy w R
Domyślne etykiety, takie jak [,1] i [3,], utrudniają odczytanie danych wyjściowych, gdy tylko macierz nabierze rzeczywistego znaczenia. Argument dimnames oraz funkcje zastępcze rownames() i colnames() dołączają etykiety tekstowe, które następnie są przesyłane wraz z macierzą przez cbind(), t() i każdą operację wycinania.
# Name the rows and columns while the matrix is built sales <- matrix(1:6, nrow = 2, ncol = 3, dimnames = list(c('north', 'south'), c('q1', 'q2', 'q3'))) # Or attach the names afterwards rownames(sales) <- c('north', 'south') colnames(sales) <- c('q1', 'q2', 'q3') # Read the names back as a list of two character vectors dimnames(sales) # Names make label based slicing possible sales['north', 'q2']
| Funkcjonować | odczytuje | Zestawy |
|---|---|---|
| dimnames(m) | Oba wymiary jako lista dwóch wektorów | dimnames(m) <- lista(wiersze, kolumny) |
| nazwy wierszy(m) | Etykiety wierszy | nazwy_wierszy(m) <- wiersze |
| nazwy kolumn(m) | Etykiety kolumn | nazwy kolumn(m) <- kolumny |
| przyciemniony(m) | Wiersze i kolumny jako dwie liczby całkowite | dim(m) <- c(nrow, ncol) |
Po utworzeniu etykiet, sales['north', 'q2'] jest znacznie bardziej czytelne niż sales[1, 2] i przetrwa zmianę kolejności wierszy. Ustawienie komponentu dimnames na NULL powoduje ponowne usunięcie tego zestawu etykiet, a macierz przekonwertowana za pomocą as.data.frame() przenosi nazwy wierszy i kolumn bezpośrednio do ramka danych.
Matrix Operacje w R: arytmetyka, transpozycja i mnożenie
W arytmetyce macierzy sprawdza się zasada pojedynczego typu. Base R obsługuje cały zestaw bez dodatkowego pakietu, ale łatwo pomylić dwa operatory: * mnoży element przez element, podczas gdy %*% wykonuje prawdziwe mnożenie macierzy i wymaga, aby kolumny lewego operandu odpowiadały wierszom prawego operandu.
m1 <- matrix(1:4, nrow = 2) m2 <- matrix(5:8, nrow = 2) m1 + m2 # element by element addition m1 * m2 # element by element product, NOT matrix multiplication m1 %*% m2 # true matrix multiplication t(m1) # transpose: rows become columns solve(m1) # inverse, for a square matrix that is not singular rowSums(m1) # one total per row colMeans(m1) # one mean per column apply(m1, 1, max) # any function, applied row by row
- t(m):Transponuje macierz, więc element [i, j] staje się [j, i]. Nazwy wymiarów są przenoszone.
- rozwiązać(m): Zwraca odwrotność macierzy kwadratowej, nieosobliwej, a solve(a, b) rozwiązuje układ liniowy.
- wiersze sum / kolumny sum / wiersze średnich / kolumny średnich: Udokumentowane jako równoważne apply() z sumą lub średnią, ale o wiele szybsze.
- zastosuj(m, MARGINES, ZABAWA):MARGIN = 1 przegląda wiersze, a MARGIN = 2 przegląda kolumny, bez względu na podaną funkcję.
- diagnostyka, det, crossprod: Przekątna, wyznacznik i szybsza forma t(x) %*% y.
Ponieważ operacje te są wektoryzowane, zastępują pętle, a nie tkwią w nich. Podsumowanie, które wymagałoby zagnieżdżonej pętli for obejmującej tysiące komórek, staje się pojedynczym wywołaniem colMeans(), co ma znaczenie, gdy tylko dane się rozrosną.
Macierz, ramka danych i tablica w R
Macierze, ramki danych i tablice wyglądają prostokątnie w konsoli, ale odpowiadają na różne pytania. Tabela ustawia je obok siebie.
| Właściwość | Matrix | Ramka danych | Szyk |
|---|---|---|---|
| Wymiary | Dokładnie 2 | Dokładnie 2 | Jakikolwiek numer |
| Typy kolumn | Jeden typ dla całego obiektu | Inny typ na kolumnę | Jeden typ dla całego obiektu |
| Zbudowany z | matryca() | data.frame() | szyk() |
| Typowe zastosowanie | Obliczenia numeryczne i algebra liniowa | Mieszane dane obserwacyjne | Tabele skumulowane, np. z liczbą według roku |
| Etykiety wierszy | Opcjonalne nazwy wymiarów | Nazwy wierszy zawsze obecne | Opcjonalne nazwy wymiarów |
# A matrix holds one type only, so mixing coerces everything to character mixed <- matrix(c(1, 2, 'a', 'b'), nrow = 2) class(mixed[1, 1]) # Convert between the structures as.data.frame(matrix_c) as.matrix(mtcars) # A matrix is the two dimensional case of an array is.matrix(matrix_c) inherits(matrix_c, 'array')
Sięgnij po macierz, gdy każda komórka to ten sam rodzaj liczby, a obliczenia są arytmetyczne. Sięgnij po ramka danych gdy kolumny zawierają różne typy, na przykład nazwę znaku obok ceny numerycznej i czynnik. Sięgnij po podstęp gdy części mają różną długość, a w przypadku tablicy, gdy rzeczywiście istnieje trzeci indeks, taki jak czas lub region. Konwersja w obu kierunkach jest tania dzięki as.matrix() i as.data.frame(), więc struktura może podążać za zadaniem, a nie odwrotnie.




