【问题标题】:R - expect_equal. Only print cases which break toleranceR-expect_equal。仅打印超出公差的案例
【发布时间】:2015-12-04 13:05:12
【问题描述】:

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

【问题讨论】:

  • 一种方法是在表格上创建一个新的向量甚至列来保存它们是否超出了公差水平。这样,您可以稍后参考它,然后通过仅对不符合您条件的条目调用的函数打印出您需要的内容。

标签: r testthat


【解决方案1】:

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

testthat:::compare.numeric

在 R 命令提示符下。

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

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

results <- test()

【讨论】:

  • 感谢比尔,我很快建立了自己的(相当糟糕的)测试,但这是一个更好的解决方案。也感谢@VermillionAzure 的帮助。
  • all.equal 具有容差 arg。感谢您提及。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 2018-07-21
相关资源
最近更新 更多