矩阵索引
本课属于 Coddy R 学习旅程的“逻辑与流程”单元。第 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挑战
简单完成 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")
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: R 在线编译器