R-期望u等于。仅打印超出公差的箱子

R-期望u等于。仅打印超出公差的箱子,r,testthat,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). 前2项: pos x y diff 1 2 2.0 -0.001 2 3 3.5 -0.500 即使案例1“通过”了我的测试。

我使用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).
前2项:

pos x y  diff    
1 2 2.0 -0.001    
2 3 3.5 -0.500
即使案例1“通过”了我的测试。是否可以只打印超出公差级别的案例?如果我能存储并引用失败的案例,以便更快地找出错误,那就更好了。

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

testthat:::compare.numeric
在R命令提示下

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

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

results <- test()

结果执行此操作的一种方法是在表上创建一个新的向量,甚至列,以保存它们是否超出公差级别。这样,您可以稍后参考它,然后通过一个函数打印出您需要的内容,该函数仅对不符合您标准的条目调用。感谢Bill,对于临时解决方案,我很快构建了自己的解决方案(相当差)测试,但这是一个更好的解决方案。感谢@VermillionAzure以及您的帮助。all.equal有一个容差arg。感谢您提及它。
results <- test()