0Pricing
R Academy · Lekcja

Indeksowanie i wybieranie podzbiorów macierzy

Uzyskuj dostęp do wierszy, kolumn i elementów za pomocą notacji [row, col].

Indeksowanie i wybieranie podzbiorów macierzy to bezpłatna lekcja R Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej R Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs R Academy zawiera 4 lekcji w sumie.

Podstawy indeksowania macierzy

Aby uzyskać dostęp do elementów macierzy, użyj notacji m[row, col]. Indeksy wierszy i kolumn w języku R zaczynają się od 1. Przecinek jest wymagany — jego pominięcie powoduje potraktowanie macierzy jako płaskiego wektora.

m <- matrix(1:12, nrow = 3, ncol = 4)
cat('Full matrix:
')
print(m)

# Element at row 2, column 3
cat('m[2, 3] =', m[2, 3], '
')

# Element at row 1, column 4
cat('m[1, 4] =', m[1, 4], '
')

Wyodrębnianie całego wiersza

Pozostaw indeks kolumny pusty, aby wyodrębnić cały wiersz. Wynikiem jest wektor (wymiar macierzy zostaje usunięty). Przecinek nadal musi być obecny.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')
print(scores)

# Extract Alice's row
alice_scores <- scores[1, ]
cat('Alice:', alice_scores, '
')
cat('Alice mean:', mean(alice_scores), '
')

Wyodrębnianie całej kolumny

Pozostaw indeks wiersza pusty, aby wyodrębnić całą kolumnę. Podobnie jak przy wyodrębnianiu wiersza, wynikiem jest wektor. Przecinek oddzielający pozycje wiersza i kolumny nadal musi być obecny.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')

# Extract the Math column
math_scores <- scores[, 1]
cat('Math scores:', math_scores, '
')
cat('Math mean:  ', mean(math_scores), '
')
cat('Math max:   ', max(math_scores), '
')

Wybieranie wielu wierszy i kolumn

Użyj wektora indeksów, aby jednocześnie wyodrębnić wiele wierszy lub kolumn. Wynikiem jest podmacierz (nadal macierz, a nie wektor), zachowująca strukturę dwuwymiarową.

m <- matrix(1:16, nrow = 4, ncol = 4)
cat('Original 4x4:
')
print(m)

# Extract rows 1,3 and columns 2,4
sub_m <- m[c(1, 3), c(2, 4)]
cat('Submatrix rows 1,3 cols 2,4:
')
print(sub_m)
cat('Class:', class(sub_m), '
')

Dostęp według nazwy wiersza lub kolumny

Jeśli macierz ma nazwy wierszy i kolumn, można indeksować ją według nazwy zamiast pozycji. Jest to czytelniejsze i bardziej odporne na zmianę kolejności wierszy lub kolumn.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE,
                 dimnames = list(
                   c('Alice', 'Bob', 'Carol'),
                   c('Math', 'Sci', 'Eng', 'Hist')
                 ))

# Access by name
cat('Bob Science:', scores['Bob', 'Sci'], '
')
cat('Carol row:
')
print(scores['Carol', ])
cat('English column:
')
print(scores[, 'Eng'])

Indeksowanie logiczne macierzy

Do wybierania elementów można użyć wektora logicznego (lub macierzy logicznej). Gdy wektor logiczny jest używany w jednym wymiarze, wybiera wiersze lub kolumny, dla których wartość wynosi TRUE.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')

# Select students with mean score >= 85
row_means <- rowMeans(scores)
high_achievers <- scores[row_means >= 85, ]
cat('High achievers (mean >= 85):
')
print(high_achievers)

Indeksowanie ujemne — wykluczanie wierszy i kolumn

Poprzedź indeks znakiem -, aby wykluczyć dany wiersz lub kolumnę. To wygodny sposób usuwania konkretnych wierszy lub kolumn bez wymieniania wszystkich pozostałych, które mają zostać zachowane.

m <- matrix(1:12, nrow = 3, ncol = 4, byrow = TRUE)
cat('Original:
')
print(m)

# Drop row 2
cat('Without row 2:
')
print(m[-2, ])

# Drop columns 1 and 3
cat('Without cols 1 and 3:
')
print(m[, c(-1, -3)])

Pojedynczy element z drop = FALSE

Domyślnie wyodrębnienie pojedynczego wiersza lub kolumny usuwa wymiar (zwraca wektor). Użyj drop = FALSE, aby zachować wynik jako macierz (wraz ze strukturą wierszy i kolumn).

m <- matrix(1:9, nrow = 3, ncol = 3)

# Default: drops to vector
row1_vector <- m[1, ]
cat('m[1,] class:', class(row1_vector), '
')  # numeric (vector)

# drop = FALSE: keeps as 1-row matrix
row1_matrix <- m[1, , drop = FALSE]
cat('m[1,,drop=FALSE] class:', class(row1_matrix), '
')
cat('Dimensions:', dim(row1_matrix), '
')

Zastępowanie wartości według indeksu

Można modyfikować konkretne elementy, łącząc indeksowanie z przypisaniem. Działa to w przypadku pojedynczych elementów, całych wierszy, całych kolumn oraz podmacierzy.

m <- matrix(0, nrow = 4, ncol = 4)
cat('Zero matrix:
')
print(m)

# Set diagonal to 5
for (i in 1:4) m[i, i] <- 5
cat('After setting diagonal:
')
print(m)

# Replace entire row 2
m[2, ] <- c(1, 2, 3, 4)
cat('After replacing row 2:
')
print(m)

Indeksowanie liniowe (płaskie)

Macierz jest wewnętrznie przechowywana jako płaski wektor (kolumna po kolumnie). Do elementów można uzyskać dostęp za pomocą pojedynczego indeksu całkowitego w tej płaskiej kolejności. Bywa to przydatne podczas operacji zbiorczych.

m <- matrix(c(10,20,30,40,50,60), nrow = 2, ncol = 3)
cat('Matrix:
')
print(m)

# Flat indices: column by column
cat('m[1] =', m[1], '(row 1, col 1)
')
cat('m[3] =', m[3], '(row 1, col 2)
')
cat('m[5] =', m[5], '(row 1, col 3)
')

# Replace flat index 4
m[4] <- 99
print(m)

Podsumowanie indeksowania

Podręczne zestawienie indeksowania macierzy w języku R:

  • m[r, c] — pojedynczy element w wierszu r i kolumnie c
  • m[r, ] — cały wiersz r
  • m[, c] — cała kolumna c
  • m[c(r1,r2), c(c1,c2)] — podmacierz
  • m['name', 'name'] — dostęp według nazwy wymiaru
  • m[-r, ] — wykluczenie wiersza r
  • m[logical_vec, ] — logiczny wybór wierszy
  • m[r, , drop=FALSE] — zachowanie wyniku jako macierzy
m <- matrix(c(5,10,15,20,25,30), nrow = 2, ncol = 3)
cat('m[1,2] =', m[1,2], '
')
cat('m[2,]  =', m[2,], '
')
cat('m[,3]  =', m[,3], '
')
cat('m[-1,] :
'); print(m[-1, ])

Szybkie sprawdzenie

Co zwraca m[-2, ] dla macierzy m mającej 3 wiersze?

Podsumowanie: indeksowanie macierzy

Świetna praca! Najważniejsze informacje z tej lekcji:

  • m[r, c] używa najpierw wiersza, a potem kolumny — obie pozycje są oddzielone przecinkiem
  • Pozostaw jedną stronę pustą (m[r, ] lub m[, c]), aby wyodrębnić całe wiersze lub kolumny
  • Indeksy ujemne wykluczają wiersze lub kolumny
  • Wektory logiczne mogą filtrować wiersze lub kolumny
  • Nazwane wymiary umożliwiają indeksowanie według nazwy, co poprawia czytelność
  • drop = FALSE zapobiega utracie wymiaru podczas wyodrębniania pojedynczych wierszy lub kolumn
# Practical: find best student per subject
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')

for (subj in colnames(scores)) {
  best <- rownames(scores)[which.max(scores[, subj])]
  cat('Best in', subj, ':', best, '
')
}

Często zadawane pytania

Czy lekcja „Indeksowanie i wybieranie podzbiorów macierzy” jest bezpłatna?

Tak — pełny tekst „Indeksowanie i wybieranie podzbiorów macierzy” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu R Academy, przejdź na CoddyKit PRO. Kurs R Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Indeksowanie i wybieranie podzbiorów macierzy”?

Uzyskuj dostęp do wierszy, kolumn i elementów za pomocą notacji [row, col]. Ćwiczysz R Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć R Academy?

Nie wymagamy żadnego doświadczenia. R Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Indeksowanie i wybieranie podzbiorów macierzy”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji R Academy?

Tak. Każda lekcja R Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Tworzenie macierzy za pomocą matrix()
  2. Indeksowanie i wybieranie podzbiorów macierzy
  3. Arytmetyka i operacje na macierzach
  4. Transponowanie i zmiana kształtu macierzy
← Powrót do R Academy