Menu
CoddyTech

Lập chỉ số ma trận

Thuộc phần Logic và luồng điều khiển trong hành trình R của Coddy. Bài học 18 trên 64.

m[i, j] là giá trị ở hàng i và cột j. Để trống một phía để lấy toàn bộ hàng hoặc cột: m[i, ] là hàng i và m[, j] là cột j.

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

Đầu ra:

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

Các chỉ số tương tự cũng dùng được ở bên trái <-, nên bạn có thể thay thế một ô, một hàng hoặc một cột:

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

Đầu ra:

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

Hàng và cột có thể có tên, được đặt bằng rownames() và colnames(). Khi đó, tên có thể dùng làm chỉ số:

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"])

Đầu ra:

[1] 8
north south 
    3     2 

Các vectơ chỉ số chọn cùng lúc một khối hàng và cột:

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

Đầu ra:

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

Thử thách

Dễ

Hoàn thành cell_report(m, r, c). Trả về ba dòng: Cell: kèm giá trị ở hàng r và cột c, Row: kèm các giá trị ở hàng r, và Column: kèm các giá trị ở cột c. Ngăn cách các giá trị bằng một dấu cách.

Code được cung cấp đọc một ma trận từ một dòng: các hàng được ngăn cách bằng ; và các giá trị trong một hàng được ngăn cách bằng ,, vì vậy 1,2;3,4 là ma trận gồm các hàng 1 2 và 3 4. Hai dòng tiếp theo chứa r và c. Code in ra từng dòng được trả về.

Tự làm thử

cell_report <- function(m, r, c) {
  # Viết code của bạn ở đây
  c("Cell: ", "Row: ", "Column: ")
}

# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
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 iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch R online