我遇到了该函数的某种奇怪(或只是出乎意料?)的行为seq
。
创建简单序列时,某些值无法与 == 运算符正确匹配。
看这个最小的例子:
my.seq <- seq(0, 0.4, len = 5)
table(my.seq) # ok! returns 0 0.1 0.2 0.3 0.4
# 1 1 1 1 1
which(my.seq == 0.2) # ok! returns 3
which(my.seq == 0.3) # !!! returns integer(0)
不过,当手动创建序列时,它似乎有效:
my.seq2 <- c(0.00, 0.10, 0.20, 0.30, 0.40)
which(my.seq2 == 0.3) # ok! returns 4
你对此有什么解释吗?我通过使用解决了这个问题which(round(my.seq, 2) == 0.3)
但我对造成问题的原因感兴趣。
预先感谢您的评论。
计算机不能很好地表示浮点数。作为大多数人在计算机上处理数字的主要方式,电子表格隐藏这一点的总体趋势导致了许多问题。
切勿与精确的浮点值匹配。 R 中有一些函数可以处理这个问题(例如all.equal
)但我更喜欢以下内容。
假设您有一个未知的浮点变量 A,并且您想查看它是否等于 0.5。
abs(A - 0.5) < tol
将容差设置为您需要的接近 0.5 的程度。例如,tol <- 0.0001
可能适合你。
如果你的值看起来应该是整数。或者,如果您知道要测试的小数位数,则可以四舍五入到该小数位数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)