我发现在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
那是怎么回事?即使TRUE
和a[1]
之间的差异远远高于容差值,为什么b[1]
会产生结果?
答案 0 :(得分:5)
实际上,这是all.equal
函数的预期行为。为了更好地理解这个问题,这里只是对all.equal
主要做什么的一个小概述。
check.attributes
设置为FALSE
,则会跳过此步骤。NA
和current
中target
的值是否一致。如果他们没有,则退出该功能并返回正确的消息。tolerance
,则函数返回TRUE
;否则返回一个具有平均差异的字符串。最后一步是至关重要的一步。 all.equal
不会检查所有差异是否低于容差水平。它检查(绝对)差异的平均值是否为。这可能会产生看起来像是误报的东西。在您的情况下,a
和b
的所有元素都不同;第一个元素(0.1)的微小差异除以不同值的数量,这是非常大的。它最终是一个低于默认容差的数字。
必须强调的是,这些误报&#34;只能在OP发布的边缘情况下出现。