R - expect_equal。只打印破坏容差的案例

时间:2015-11-16 10:30:17

标签: r testthat

我正在使用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“通过”我的考试。是否可以仅打印破坏公差等级的案例?如果我能够存储并引用失败的案例以便我可以更快地排除错误,那就更好了。

1 个答案:

答案 0 :(得分:0)

快速回答是&#34; no&#34;。您不能只显示破坏容差的值。原因是使用&#34; all.equal&#34;来测试相等性。没有该选项的功能(要看到这一点,你可以看看函数&#34; compare.numeric&#34;在testthat中通过

testthat:::compare.numeric

在R命令提示符下。

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

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

results <- test()