Menu
Coddy logo textTech

Индексация матриц

Часть раздела Логика и потоки выполнения путешествия по R на Coddy. Урок 18 из 64.

m[i, j] — это значение в строке i и столбце j. Оставьте одну сторону пустой, чтобы получить всю строку или столбец: m[i, ] — это строка i, а m[, j] — столбец j.

m <- matrix(1:6, nrow = 2, byrow = TRUE)
print(m[2, 3])
print(m[1, ])
print(m[, 2])

Вывод:

[1] 6
[1] 1 2 3
[1] 2 5

Те же индексы работают слева от <-, поэтому можно заменить ячейку, строку или столбец:

m <- matrix(0, nrow = 2, ncol = 3)
m[1, 2] <- 5
m[2, ] <- c(7, 8, 9)
print(m)

Результат:

     [,1] [,2] [,3]
[1,]    0    5    0
[2,]    7    8    9

У строк и столбцов могут быть имена, заданные с помощью rownames() и colnames(). Затем имя работает как индекс:

sales <- matrix(c(3, 5, 2, 8), nrow = 2, byrow = TRUE)
rownames(sales) <- c("north", "south")
colnames(sales) <- c("jan", "feb")
print(sales["south", "feb"])
print(sales[, "jan"])

Результат:

[1] 8
north south 
    3     2 

Векторы индексов одновременно выбирают блок строк и столбцов:

m <- matrix(1:9, nrow = 3, byrow = TRUE)
print(m[1:2, 2:3])
print(m[c(1, 3), 1])

Результат:

     [,1] [,2]
[1,]    2    3
[2,]    5    6
[1] 1 7
challenge icon

Задание

Легко

Завершите cell_report(m, r, c). Верните три строки: Cell: со значением в строке r и столбце c, Row: со значениями строки r и Column: со значениями столбца c. Разделяйте значения одиночными пробелами.

Предоставленный код считывает матрицу из одной строки: строки разделяются с помощью ;, а значения строки — с помощью ,, поэтому 1,2;3,4 — это матрица со строками 1 2 и 3 4. Следующие две строки содержат r и c. Код выводит каждую возвращённую строку.

Попробуйте сами

cell_report <- function(m, r, c) {
  # Напишите свой код здесь
  c("Cell: ", "Row: ", "Column: ")
}

# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
parse_matrix <- function(line) {
  rows <- strsplit(line, ";")[[1]]
  matrix(as.numeric(unlist(strsplit(rows, ","))), nrow = length(rows), byrow = TRUE)
}
cat(cell_report(parse_matrix(input[1]), as.numeric(input[2]), as.numeric(input[3])), sep = "\n")
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор R