0Pricing
R Academy · Урок

Индексация и выборка элементов матриц

Обращайтесь к строкам, столбцам и элементам с помощью записи [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 и столбце c
  • m[r, ] — вся строка r
  • m[, c] — весь столбец c
  • m[c(r1,r2), c(c1,c2)] — подматрица
  • m['name', 'name'] — обращение по имени измерения
  • m[-r, ] — исключение строки r
  • m[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 — локальная установка не требуется.

Все уроки этого курса

  1. Создание матриц с помощью matrix()
  2. Индексация и выборка элементов матриц
  3. Арифметика и операции над матрицами
  4. Транспонирование и изменение формы матриц
← Назад к R Academy