提问人:ajax2112 提问时间:10/20/2019 更新时间:10/20/2019 访问量:644
当两个参数为 true 时,R 返回 false 和 == [duplicate]
R is returning false with == when the two paramaters are true [duplicate]
问:
在这里,我有一个 3 x 3 矩阵,并计算了矩阵的行列式和矩阵转置的行列式(根据代码,它们应该是相同的),但是在比较它们以检查它们是否相等时,我得到的输出为 false。
如果我将值分配给其他变量并检查它们,也是如此。
这是我的代码:
matrixTest <- matrix(
c(c(1,5,7),c(1,2,6),c(8,2,6)),
ncol = 3,
)
det(matrixTest)
det(t(matrixTest))
det(matrixTest) == det(t(matrixTest))
运行此块时 R Studio 的输出:
> det(matrixTest)
[1] 112
> det(t(matrixTest))
[1] 112
>
> det(matrixTest) == det(t(matrixTest))
[1] FALSE
答:
1赞
G. Grothendieck
10/20/2019
#1
这是由于浮点近似:
det(matrixTest) - det(t(matrixTest))
## [1] -9.947598e-14
用于比较两个对象是否在容差范围内相等。有关详细信息,请参阅。all.equal
?all.equal
all.equal(det(matrixTest), det(t(matrixTest)))
## [1] TRUE
在这种特殊情况下,由于元素都是整数,我们知道结果必须是整数,因此另一个建议是将两边四舍五入:
round(det(matrixTest)) == round(det(t(matrixTest)))
## [1] TRUE
还有:zapsmall
zapsmall(det(matrixTest)) == zapsmall(det(t(matrixTest)))
## [1] TRUE
评论
0赞
ajax2112
10/20/2019
您是否知道我可以阅读有关 R 处理此类情况的方式的任何资源?了解如何在未来避免它。
0赞
G. Grothendieck
10/20/2019
这就是浮点在所有语言中的工作方式,而不仅仅是 R,因此任何关于浮点的一般讨论都应该这样做。也许维基百科的条目:en.wikipedia.org/wiki/Floating-point_arithmetic
0赞
Jon Spring
10/20/2019
请参阅我上面链接的问题中的信息性答案:stackoverflow.com/a/9508558/6851825
上一个:三等号 R
评论
sprintf("%.15f", det(matrixTest))
sprintf("%.15f", det(t(matrixTest)))
all.equal(det(matrixTest), det(t(matrixTest)))