【发布时间】:2011-12-01 14:48:15
【问题描述】:
previous post 提示我发布此问题。将==重新分配给isTRUE(all.equal())(和!=重新分配给!isTRUE(all.equal())似乎是一个最佳实践。我想知道其他人是否在实践中这样做?我刚刚意识到我使用==和@987654327 @ 在我的代码库中进行数字相等。我的第一反应是我需要做一个全面的擦洗并转换为all.equal。但实际上,每次我使用== 和!= 时我都想测试相等(不管的数据类型)。事实上,我不确定这些操作除了平等之外会测试什么。我确定我在这里遗漏了一些概念。有人可以启发我吗?我看到的唯一反对这种方法的论点是在某些情况下,由于all.equal 的容差,两个不同的数字看起来是相同的。但是我们被告知,实际上相同的两个数字可能不会通过identical(),因为它们是如何存储在内存中的. 那么,不默认all.equal到底有什么意义呢?
【问题讨论】:
-
这似乎是一件很奇怪的事情,然后我阅读了比较帮助页面中的注释:“不要使用 == 和 != 进行测试,例如在 if 表达式中,你必须得到一个 TRUE 或 FALSE。除非你绝对确定不会发生任何异常情况,否则你应该使用相同的函数。所以也许这不是一个荒谬的想法。
-
我要说不,你不应该。请改用
identical,并在子集时保留==以进行矢量化比较。 -
如果您开始重载常用运算符,您的代码将严重不可移植。更好地了解每个运算符或函数的作用,并为正确的工作使用正确的工具。
-
joran - 但相同并不总是有效。来自 R 常见问题解答:“因此,两个浮点数不会可靠地相等,除非它们是由相同的算法计算的,而且即使那样也不总是”。所以基本上这就是说即使两个数字相同,相同也会失败!
-
@SFun28 没错,但这只是一个浮点问题,你会在任何地方遇到。最好不要掩盖
==。为什么要定义新的===和!==而不是使用isTRUE和all.equal?
标签: r