R all.equal函数给出了一个假阳性

R all.equal函数给出了一个假阳性,r,R,我在all.equal函数中发现了一个错误,它似乎给出了假阳性结果。以下是一个可重复的小示例: a<-rep(1,1e7) #create a second vector in which each element is almost equal to a b<-a + .Machine$double.eps #as expected a and b are "all.equal" all.equal(a,b) #[1] TRUE #Now we set a slighty diff

我在
all.equal
函数中发现了一个错误,它似乎给出了假阳性结果。以下是一个可重复的小示例:

a<-rep(1,1e7)
#create a second vector in which each element is almost equal to a
b<-a + .Machine$double.eps
#as expected a and b are "all.equal"
all.equal(a,b)
#[1] TRUE
#Now we set a slighty different value for the first element of b
b[1]<-1.1
all.equal(a,b)
#[1] TRUE

a实际上,这是
all.equal
函数的预期行为。为了更好地理解这件事,下面是对
all.equal
主要功能的一个小结

  • 首先,它检查要比较的两个对象的属性。当然,如果
    检查.attributes
    设置为
    FALSE
    ,则跳过此步骤
  • 然后,它检查
    NA
    s值是否在
    current
    target
    中都对应。如果没有,函数将退出并返回正确的消息
  • 接下来,删除完全相等的元素
  • 计算剩余值绝对差值的平均值。如果此平均值小于
    公差
    ,则函数返回
    ;否则将返回一个具有平均差的字符串
最后一步是关键的一步
all.equal
不检查所有差异是否低于公差水平。它检查(绝对)差异的平均值是否正确。这可能会产生一个看似假阳性的结果。在您的情况下,
a
b
的所有元素都是不同的;第一个元素(0.1)的微小差异除以不同值的数量,这是非常大的。它最终是一个低于默认公差的数字

必须强调的是,这些“误报”只会出现在像一篇专栏文章这样的边缘案例中