2

我正在使用 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“通过”了我的测试。是否可以只打印超出公差级别的案例?如果我可以存储并参考失败的案例,这样我可以更快地排除错误,那就更好了。

4

1 回答 1

0

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

testthat:::compare.numeric

在 R 命令提示符下。

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

对于问题的第二部分(存储以引用稍后失败的测试),您可以存储来自 testthat 的 test() 函数调用的结果,并且从中可以找到哪个函数有错误。

results <- test()
于 2015-12-04T05:05:12.527 回答