Индексация и выборка элементов матриц
Обращайтесь к строкам, столбцам и элементам с помощью записи [row, col].
«Индексация и выборка элементов матриц» — бесплатный урок R Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.
Основы индексации матриц
Чтобы обращаться к элементам матрицы, используйте запись m[row, col]. Индексы строк и столбцов в R начинаются с 1. Запятая обязательна — если её не указать, матрица рассматривается как одномерный вектор.
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], '
')Извлечение целой строки
Оставьте индекс столбца пустым, чтобы извлечь целую строку. Результатом будет вектор (размерность матрицы будет удалена). Запятая всё равно должна присутствовать.
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), '
')Извлечение целого столбца
Оставьте индекс строки пустым, чтобы извлечь целый столбец. Как и при извлечении строки, результатом будет вектор. Запятая, разделяющая позиции строки и столбца, всё равно должна присутствовать.
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), '
')Выбор нескольких строк и столбцов
Используйте вектор индексов, чтобы одновременно извлечь несколько строк или столбцов. Результатом будет подматрица (по-прежнему матрица, а не вектор), сохраняющая двумерную структуру.
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), '
')Обращение по имени строки или столбца
Если у матрицы есть имена строк и столбцов, можно обращаться к элементам по имени, а не по позиции. Такой способ нагляднее и надёжнее при изменении порядка строк или столбцов.
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'])Логическая индексация матриц
Для выбора элементов можно использовать логический вектор (или логическую матрицу). Если логический вектор используется для одного измерения, он выбирает строки или столбцы, в которых значение равно 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)Отрицательная индексация — исключение строк и столбцов
Добавьте перед индексом префикс -, чтобы исключить соответствующую строку или столбец. Это удобный способ удалить определённые строки или столбцы, не перечисляя все остальные, которые нужно сохранить.
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)])Один элемент с drop = FALSE
По умолчанию при извлечении одной строки или столбца размерность удаляется (возвращается вектор). Используйте drop = FALSE, чтобы сохранить результат в виде матрицы (вместе со структурой строк и столбцов).
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), '
')Замена значений по индексу
Вы можете изменять отдельные элементы, сочетая индексацию с присваиванием. Это работает для отдельных элементов, целых строк, целых столбцов и подматриц.
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)Линейная (плоская) индексация
Внутри матрица хранится как одномерный вектор (по столбцам). К элементам можно обращаться с помощью одного целочисленного индекса в этом плоском порядке. Иногда это удобно для массовых операций.
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)Краткий обзор индексации
Краткая памятка по индексации матриц в R:
m[r, c]— отдельный элемент в строке r и столбце cm[r, ]— вся строка rm[, c]— весь столбец cm[c(r1,r2), c(c1,c2)]— подматрицаm['name', 'name']— обращение по имени измеренияm[-r, ]— исключение строки rm[logical_vec, ]— логический выбор строкm[r, , drop=FALSE]— сохранение в виде матрицы
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, ])Быстрая проверка
Что возвращает m[-2, ] для матрицы m с 3 строками?
Итоги: индексация матриц
Отличная работа! Основные выводы этого урока:
m[r, c]использует сначала строку, затем столбец — обе позиции разделяются запятой- Оставьте одну сторону пустой (
m[r, ]илиm[, c]), чтобы извлечь целую строку или столбец - Отрицательные индексы исключают строки или столбцы
- Логические векторы позволяют отфильтровать строки или столбцы
- Именованные измерения позволяют обращаться к элементам по имени, что повышает наглядность
drop = FALSEпредотвращает потерю размерности при извлечении отдельных строк или столбцов
# 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, '
')
}Часто задаваемые вопросы
Урок «Индексация и выборка элементов матриц» бесплатный?
Да — полный текст урока «Индексация и выборка элементов матриц» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.
Чему я научусь в уроке «Индексация и выборка элементов матриц»?
Обращайтесь к строкам, столбцам и элементам с помощью записи [row, col]. Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать R Academy?
Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Индексация и выборка элементов матриц»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке R Academy?
Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание матриц с помощью matrix()
- Индексация и выборка элементов матриц
- Арифметика и операции над матрицами
- Транспонирование и изменение формы матриц