当我尝试创建一个双循环来填充矩阵工作时,我的工作流程中遇到了一些问题。在我的脚本开始时,我定义:
Tijd_SAT_i <- c("08", "09", "10", "11", "12", "13", "14")
D <- c(0, 0.01, 0.02, 0.03, 0.04, 0.05)
POD <- matrix(1:(length(Tijd_SAT_i)*length(D)), c(length(Tijd_SAT_i), length(D)))
FAR <- matrix(1:(length(Tijd_SAT_i)*length(D)), c(length(Tijd_SAT_i), length(D)))
之后创建“BASE”(86 x 42 x 7 阵列)和“SAT”(86 x 42 x 7 阵列)的大量内容。BASE 和 SAT 都包含 0 到 22 之间的值作为双精度值,并且具有 NA 值(NA 值构成了荷兰的轮廓以及除此之外的所有内容)。接下来,我需要填充两个矩阵 POD(检测概率)和 FAR(误报率)对于每小时 (Tijd_SAT_i) 我想计算 6 个不同的阈值及其对 POD 和 FAR 的影响。稍后我会将这些值放入数据框中,然后使用 RGL 绘制它们。我编写的填充 POD 和 FAR 的代码是:
for (k in 1:(length(Tijd_SAT_i))) {
for (l in 1:(length(D))) {
pre_C_BASE <- BASE[,,k]
pre_C_SAT <- SAT[,,k]
pre_C_BASE[pre_C_BASE >= D[l]] <- 1
pre_C_BASE[pre_C_BASE < D[l]] <- 0
pre_C_SAT[pre_C_SAT >= D[l]] <- 1
pre_C_SAT[pre_C_SAT < D[l]] <- 0
C_SAT <- as.vector(SAT)
C_BASE <- as.vector(BASE)
C_table <- (with(warpbreaks, table(C_SAT, C_BASE)))
print(C_table)
print(dim(C_table))
#p <- C_table[1, 1]/(C_table[1, 1]+C_table[2, 1])
#f <- C_table[1, 2]/(C_table[1, 1]+C_table[1, 2])
#POD[k, l] <- p
#FAR[k, l] <- f
}
}
但是由于某种模糊的原因,C_table 并没有变成 2 x 2 矩阵,而是 1237 x 3351 矩阵。因此无法执行#s 后面的内容。我在哪里错了?
编辑:我发现 2 × 2 矩阵未显示的原因:错误的参考 SAT 应该是 pre_C_SAT。现在我的权变矩阵已经制作好了(全部 42 个)。现在的问题是,如果我使用#s 运行该位,我会收到“下标越界”错误。这是为什么?
编辑:我认为问题在于“表”并不总是输出 2 x 2 矩阵。
编辑:Pffffrwt。我修好了它。在 table 命令中有一个令人难以置信的烦人的小问题,当输入向量之一中不存在零时,它不会返回 2 x 2 矩阵。我通过将 1, 0, 0, 1 和 1, 0, 1, 0 附加到后续向量来修复它,强制创建所有 4 个值,然后从后续等式中减去 1。