all.equal
在R中测试发生不匹配的观测值的差异(绝对/相对(,然后确保其在公差范围内。理想情况下,它应该按照容差量测试所有不匹配的观测结果,然后报告差异。。。为什么这样的行为?
例如,在下面的情况下,我希望all.equal的结果为FALSE,因为x中的第一个观测值不等于y
> x = rep(1, 1000)
> y = rep(1, 1000)
> x = x + 0.001
> y[1] = 2
> print(all.equal(x, y, scale = 1, tolerance=0.01))
[1] TRUE
如果目标参数和当前参数几乎等于指定的容差(默认值接近1.5e-8(,则all.equal
函数返回TRUE。否则,函数不会返回FALSE,而是返回平均相对(scale=NULL
(或绝对(scale=1
(差。
x = rep(1, 1000)
y = rep(1, 1000)
x = x + 0.001
y[1] = 2
print(all.equal(x, y, scale = 1)) # Omit the tolerance
[1] "Mean absolute difference: 0.001998"
mean(abs(x-y))
[1] 0.001998
如果你阅读all.equal的帮助页面,你会看到原因:
tolerance numeric ≥ 0. Differences smaller than tolerance are not reported.
编辑:根据Aaron对OP混乱来源的评估,可能需要any
功能:
y[1] = 1
any(abs(x-y) > 0.01) # Element-wise comparison
[1] FALSE
y[1] = 2
any(abs(x-y) > 0.01)
[1] TRUE