为什么R中的all.equal不测试每个观测值的差异,其中不匹配是通过公差量而不是总平均值发生的

  • 本文关键字:不匹配 平均值 测试 equal all 个观 中的 r
  • 更新时间 :
  • 英文 :


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

最新更新