我观察到了这个:
> class(x)
[1] "numeric"
> str(x)
num [1:2500] 1 1 1 1 1 1 1 1 1 1 ...
> table(x)
1
2500
> table(x == 1)
FALSE TRUE
299 2201
> all.equal(x, rep(1,length(x)))
[1] TRUE
> dput(x)
c(1, ..... 1) # all ones
Run Code Online (Sandbox Code Playgroud)
这怎么可能?我理解浮点数不应该==在一般情况下进行比较,但是应该table不一致==?
PS.显然,table是与之一致,all.equal而不是==因为它首先将其参数转换为因子(即字符串).
PPS.table(x-1)显示非0值.
它在文档中的哪些地方承诺它们会保持一致?table期望"一个或多个可以被解释为因子的对象",即内部做的factor(x),x首先变成一个角色然后变成一个因子.
x <- 1 - 1e-16
x == 1
#[1] FALSE
as.character(x)
#1] "1"
factor(x) == "1"
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)