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