R-expect_equal。只打印违反公差的案例

R - expect_equal. Only print cases which break tolerance

我正在使用 R 函数 expect_equal 来测试两个大向量是否(几乎)在一定公差范围内相等。我想知道是否有办法只打印 expect_equal 超出容差的情况。

例如

a <- c(2.001, 3.5)
b <- c(2,3)

expect_equal(object=a,expected=b,tolerance=0.015, scale=1).

这会打印错误:

Error: c(2, 3) not equal to c(2.001, 3.5)
2/2 mismatches (average diff: 0.25).

前 2 个:

pos x y  diff    
1 2 2.0 -0.001    
2 3 3.5 -0.500

尽管案例 1 "passes" 我的测试。是否可以只打印超出公差水平的案例?更好的是,如果我可以存储并引用失败的案例,以便我可以更快地排除错误。

快速回答是"no"。您不能只显示超出公差的值。原因是使用没有该选项的 "all.equal" 函数测试相等性(要查看这一点,您可以通过

查看 testthat 中的函数 "compare.numeric"
testthat:::compare.numeric

在 R 命令提示符下。

更长的答案取决于您为获得答案而付出的努力,以及您重复使用该方法的频率。最简单的方法是按照@VermillionAzure 提到的那样,手动生成超出公差的向量并检查其长度是否为 0(或类似测试)。对于该测试,您可以使用 expect_true 函数。一种更复杂的方法是创建您自己的数据 class(数字除外),然后为该 class 创建您自己的比较方法。如果您确实需要按照自己的方式汇总结果,则可能需要创建自己的比较函数。

对于你问题的第二部分(存储是指后来失败的测试),你可以存储从testthat调用test()函数的结果,从中你可以找到哪个函数有错误.

results <- test()