当我使用identical
比较两个以上的对象时,结果是有意义的,但我不明白all.equal
正在做什么。 all.equal
输出的结果背后的逻辑是什么?
identical(25 + 2, 27) #TRUE -- makes sense
identical(25, 2, 27) #FALSE -- makes sense
identical(27, 22, 27) #FALSE -- makes sense
all.equal(25 + 2, 27) #TRUE -- makes sense
all.equal(25, 2, 27) #TRUE -- why?
all.equal(27, 22, 27) #TRUE -- why?
如果最后两个all.equal()
测试中的任何一个是假的,我会理解R在做什么 - 测试对象的总和是否相等(25 + 2 == 27)或测试是否有任何两个对象是相等的(27 == 27)。
什么是all.equal测试,以便最后两个方程都是真的?
答案 0 :(得分:0)
上述评论似乎是正确的。参数按顺序排列,第三个参数指定为公差。但是,以下结果显得更加陌生。
all.equal(target=25, current=2, 5)
[1] TRUE
和
all.equal(target=25, current=2, tolerance=5)
[1] TRUE
这里,公差明显小于差值,但仍然返回TRUE。如果我们将公差降低到更小,我们就会得到
all.equal(target=25, current=2, tolerance=.05)
[1] "Mean relative difference: 0.92"
发生的是相对差异是根据目标参数的平均值计算的。从帮助文件中,
比例= NULL(默认值)的数值比较通常在相对差异比例上,除非目标值接近于零:首先,计算两个数值向量的平均绝对差值。如果这小于容差或不是有限的,则使用绝对差值,否则相对差异按平均绝对目标值缩放。 (请注意,这些比较仅针对目标不是NA并且与当前不同的那些矢量元素计算。)
因此,反转目标和当前参数,我们得到
all.equal(target=2, current=25, tolerance=5)
[1] "Mean absolute difference: 23"
这是我们可能期望的。
请注意,我们也可以通过将scale参数设置为1来实现此目的:
all.equal(target=25, current=2, tolerance=5, scale=1)
[1] "Mean absolute difference: 23"
或仅命名比例,
all.equal(25, 2, 5, scale=1)
[1] "Mean absolute difference: 23"
重申了OP中的评论。