0

我没有从 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])
 }
}

当我取消注释 print(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

我应该如何更正我的代码?

4

1 回答 1

2

问题是,当你这样做时:

GCP <- matrix(nrow = 143, ncol = 4)

(143,4)你本质上是用初始化一个维度矩阵NA。然后,您只为 构建值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 的值。

于 2013-02-03T11:51:11.377 回答