嵌套循环
本课属于 Coddy R 学习旅程的“基础知识”单元。第 44 课,共 78 课。
你可以在一个循环中再放入另一个循环,创建嵌套循环。外层循环的每次迭代中,内层循环都会完整运行一次,因此处理组合或网格状模式时很有用。
rows <- 3
cols <- 2
for (i in 1:rows) {
for (j in 1:cols) {
cat("i =", i, ", j =", j, "\n")
}
}输出:
i = 1 , j = 1
i = 1 , j = 2
i = 2 , j = 1
i = 2 , j = 2
i = 3 , j = 1
i = 3 , j = 2对于 i 的每个值,内层循环都会遍历 j 的所有值。当 i 为 1 时,j 从 1 变到 2。然后 i 变为 2,j 又从 1 重新开始,变到 2。rows 和 cols 始终不变:它们只用于告诉循环何时停止。
一个实用示例是创建简单的乘法模式:
for (row in 1:3) {
for (col in 1:3) {
cat(row * col, " ")
}
cat("\n")
}输出:
1 2 3
2 4 6
3 6 9外层循环控制行,内层循环处理该行中的每一列。完成每一行后,我们会打印一个换行符,移到下一行。
挑战
简单从输入中读取两个数字:rows 和 cols。
使用嵌套循环打印一个数字矩形,其中每个单元格的值是其行号与列号之和。行号从 1 到 rows,列号从 1 到 cols。
每行单独打印一行,值之间用一个空格分隔。使用 cat() 输出,并在每行后添加换行符。
例如,如果输入是 3 和 4,输出应为:
2 3 4 5
3 4 5 6
4 5 6 7第一行(第 1 行)的值是 1+1=2、1+2=3、1+3=4、1+4=5。第二行(第 2 行)的值是 2+1=3、2+2=4、2+3=5、2+4=6,以此类推。
cat() 会在你提供的值之间添加一个空格,因此 cat(row + col, "") 会打印数字,后面恰好跟着一个空格。
为每个循环使用一个新的计数器(例如,用 row 表示行,用 col 表示每行中的数字),并将它与 rows 或 cols 进行比较。不要更改 rows 和 cols 本身:每一行都需要再次使用 cols。
亲手试试
# 读取输入
con <- file("stdin", "r")
rows <- as.integer(suppressWarnings(readLines(con, n = 1)))
cols <- as.integer(suppressWarnings(readLines(con, n = 1)))
close(con)
# TODO:在下方编写你的代码
# 使用嵌套循环打印一个矩形,每个单元格的值为行号加列号
# 使用 cat() 打印值,值之间用空格分隔,每行结束后换行这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: R 在线编译器