0

我创建了一个向量 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's。我很困惑,因为并非每个值都是如此。例如尝试x == 0.99,我得到了 100 的预期结果TRUE

引人注目的是,当我通过 尝试解决方法时unique(),索引再次起作用:

unique(x)[71]     # as a workaround for x = 0.7
x == unique(x)[71]

有任何想法吗?

4

1 回答 1

0

help("==")

对于数值和复数值,请记住==并且!= 不允许分数的有限表示,也不允许舍入误差。使用 all.equal 和相同几乎总是更可取的。请参阅示例。(这也适用于其他比较运算符。)

我们遇到了一个数值问题。

x.seq[71] - 0.7
# [1] 1.110223e-16

从 的来源来看seq.default,第 71 个值seq(from = 0, to = 1, by = 0.01)0 + 70 * 0.01,并且70 * 0.01 == 0.7确实FALSE在我的机器上。

于 2019-04-16T10:20:56.320 回答