将print 语句添加到您的循环中。这是一种很好的调试方式,也是查看正在发生的事情的绝佳方式。如果你运行这个,我想它会帮助你理解。
k <- 1
for (i in 1:3){
print(sprintf("Outer loop: i = %s, k = %s", i, k))
k <- k + 1
print(sprintf("Added one, now k = %s", k))
for (j in 1:2){
print(sprintf(" Inner loop: j = %s, k = %s", j, k))
k = k * j
print(sprintf(" Multiplied, now k = %s", k))
}
}
这将打印:
[1] "Outer loop: i = 1, k = 1"
[1] "Added one, now k = 2"
[1] " Inner loop: j = 1, k = 2"
[1] " Multiplied, now k = 2"
[1] " Inner loop: j = 2, k = 2"
[1] " Multiplied, now k = 4"
[1] "Outer loop: i = 2, k = 4"
[1] "Added one, now k = 5"
[1] " Inner loop: j = 1, k = 5"
[1] " Multiplied, now k = 5"
[1] " Inner loop: j = 2, k = 5"
[1] " Multiplied, now k = 10"
[1] "Outer loop: i = 3, k = 10"
[1] "Added one, now k = 11"
[1] " Inner loop: j = 1, k = 11"
[1] " Multiplied, now k = 11"
[1] " Inner loop: j = 2, k = 11"
[1] " Multiplied, now k = 22"
这是非常彻底的 - 第一次很好。将来,您可以使用更简单的print 语句来节省时间。
这也强调了 inner (j) 循环的作用是乘以 1,然后乘以 2。内部循环的最终效果就是将k 乘以 2,因此我们可以用一个循环执行所有相同(有意义的)操作:
k <- 1
for (i in 1:3){
k <- k + 1
k <- k * 2 ## equivalent to inner loop
}