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 5Cá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 9Hà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 7Thử 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")
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
1Chuỗi chuyên sâu
Chuỗi con với substr()Định dạng với sprintf()Tách và nối chuỗiTìm kiếm trong chuỗiThay thế văn bảnÔn tập: Tạo tên người dùng10Luồng điều khiển nâng cao
Hàm switch()ifelse() dạng vector hóarepeat và breakHàm đệ quyÔn tập: phân loại điểmTự luyện tập: Trình biên dịch R online