无法索引使用seq()和rep()创建的向量的某些值

时间:2019-04-16 10:15:13

标签: r indexing sum seq rep

我创建了一个向量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]

有什么想法吗?

1 个答案:

答案 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