Menu
CoddyTech

矩阵索引

本课属于 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
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 在线编译器