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)的微小差异除以不同值的数量,这是非常大的。它最终是一个低于默认公差的数字
必须强调的是,这些“误报”只会出现在像一篇专栏文章这样的边缘案例中