我在 R(版本 2.15.2)中的嵌套 for 循环中没有收到正确的结果。
GCP <- matrix(nrow=143,ncol=4)
for (i in 1:13) {
for (j in 1:11) {
GCP[i*j,1] = 410*(j-1)
GCP[i*j,2] = 400*(i-1)
# print(GCP[i*j,1])
}
}
当我取消注释打印(GCP[i*j,1])时,我收到的只是我所期望的:
[1] 0
[1] 410
[1] 820
[1] 1230
[1] 1640
[1] 2050
[1] 2460
[1] 2870
[1] 3280
[1] 3690
[1] 4100
[1] 0
[1] 410
[1] 820
[1] 1230
[1] 1640
[1] 2050
[1] 2460
[1] 2870
[1] 3280
[1] 3690
[1] 4100
[1] 0
...
但是当我在循环完成后输入 GCP[,1] 时:
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 410 820
[16] 410 NA 410 NA 410 820 410 NA 410 1640 410 820 1230 NA 820
[31] NA 1230 820 NA 1640 820 NA NA 820 1230 NA 2050 NA 1230 1640
[46] NA NA 1230 2460 1640 NA 1230 NA 2050 1640 2460 NA NA NA 1640
[61] NA NA 2460 2870 1640 2050 NA NA NA 2460 NA 2050 NA NA NA
[76] NA 2460 2050 NA 2870 3280 NA NA 2460 NA NA NA 2870 NA 3280
[91] 2460 NA NA NA NA 2870 NA NA 3280 3690 NA NA NA 2870 NA
[106] NA NA 3280 NA 3690 NA NA NA NA NA NA 3280 NA NA 3690
[121] 4100 NA NA NA NA NA NA NA NA 3690 NA 4100 NA NA NA
[136] NA NA NA NA NA NA NA 4100
我应该如何更正我的代码?
问题是,当你这样做时:
GCP <- matrix(nrow = 143, ncol = 4)
您本质上是在启动一个与NA
(143,4)
的维度矩阵。然后,您仅为 row = i * j
构造值。而你只是打印这些值。也许这段代码会帮助你澄清一些事情:
GCP <- matrix(nrow = 143, ncol = 4)
for (i in 1:13) {
for (j in 1:11) {
GCP[i*j,1] = 410*(j-1)
GCP[i*j,2] = 400*(i-1)
cat("i =", i, "j =", j, "i*j =", i*j, "GCP[i*j] = ", GCP[i*j,1], "n")
}
}
您将看到循环贯穿 i
和 j
的所有值。但是,您的索引仅填充某些值 = i*j
。因此,剩余的值仍然NA
。由于仅打印已设置的值,因此在打印时永远不会获得 NA。
除非您解释您要做什么,否则我无法提供解决方案。首先,您正在设置一个ncol=4
矩阵,但您只填充了前两列,正如@redmode指出的那样,您重写了一些值。
编辑:也许这就是你要找的?
GCP <- matrix(nrow = 143, ncol = 4)
for (i in 1:13) {
for (j in 1:11) {
GCP[11*(i-1) + j, 1] = 410*(j-1)
GCP[11*(i-1) + j, 2] = 400*(i-1)
}
}
这将遍历从 1 到 143 的值。