我在工作流程中遇到了一些问题,因为我正在尝试制作一个双循环来填充矩阵工作。在我的脚本开始时我定义:
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乘42乘7阵列)和“SAT”(86乘42乘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乘2矩阵,而是1237乘3351。因此#s后面的东西不能执行。我在哪里出错?
编辑:我发现2×2矩阵的原因没有显示:错误的引用SAT应该是pre_C_SAT。 现在我的应急矩阵(全部42个)。现在的问题是,如果我用#s运行该位,我会得到一个“下标越界”错误。那是为什么?
编辑:我认为麻烦在于'表'并不总是输出2乘2矩阵。
编辑:Pffffrwt。我修好了它。在table命令中有一个令人难以置信的令人讨厌的麻烦,因为当其中一个输入向量中没有零时,它不会返回2乘2的矩阵。我通过将1,0,0,1和1,0,1,0附加到后续向量来修复它,强制创建所有4个值,然后从后续等式中减去1。
答案 0 :(得分:0)
在循环的每次迭代中,您定义
C_SAT <- as.vector(SAT)
C_BASE <- as.vector(BASE)
所以C_SAT
和C_BASE
将始终是长度等于SAT
和BASE
维度的乘积的向量。
然后定义
C_table <- (with(warpbreaks, table(C_SAT, C_BASE)))
warpbreaks
数据框与您的分析有什么关系?你有没有从某个地方复制并粘贴过这个?它对结果没有影响。
无论如何,table(C_SAT, C_BASE)
的行数与C_SAT
中唯一值的数量相同,列数与C_BASE
中唯一值的数量相同。
答案 1 :(得分:0)
我通过在后续向量中附加1,0,0,1和1,0,1,0来解决问题,强制创建所有4个值,然后从后续等式中减去1。