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

问题描述 投票:0回答:1

我创建了一个包含0到1序列的向量x,其中每个值被复制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]

有任何想法吗?

r indexing sum seq rep
1个回答
0
投票

来自help("==")

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.