我创建了一个向量x,该向量x包含一个从0到1的序列,其中每个值被复制100次。当显示矢量时,它看起来还不错。但是,索引不适用于x的所有唯一值。
x.seq <- seq(from = 0, to = 1, by = 0.01)
x <- rep(x.seq, each = 100)
x
x == 0.7
x == 0.70
x显示预期结果,但是x == 0.70
仅显示FALSE
。我很困惑,因为并非每个值都如此。例如。尝试x == 0.99
,我得到100 TRUE
的预期结果。
引人注目的是,当我通过unique()
尝试解决方法时,索引再次起作用:
unique(x)[71] # as a workaround for x = 0.7
x == unique(x)[71]
有什么想法吗?
答案 0 :(得分:0)
来自help("==")
对于数值和复数值,请记住
==
和!=
不允许分数的有限表示或舍入误差。几乎总是将all.equal与same一起使用。请参阅示例。 (这也适用于其他比较运算符。)
我们遇到了数字问题。
x.seq[71] - 0.7
# [1] 1.110223e-16
通过查看seq.default
的来源,seq(from = 0, to = 1, by = 0.01)
的第71个值为0 + 70 * 0.01
,而在我的机器上70 * 0.01 == 0.7
的确为FALSE
。