我有一个自定义绘图功能,即使在plot-function中添加了其他选项之后,我也想确保它能发布相同的绘图。
不幸的是,testthat::expect_known_hash
方法失败了,因为ggplots存储了有关某些环境的信息,显然,这些信息在重新启动R时会改变。
测试功能工厂的输出时也会出现类似的问题,因为闭包还带有其环境。
有人遇到过这个问题吗,您是如何解决的?
答案 0 :(得分:2)
库compare
允许您比较不同的R对象。该程序包具有不同的功能来检测对象之间的差异。
compare(plot(0), plot(0))
TRUE
scatter <- ggplot(data=iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point(aes(color=Species, shape=Species))
scatter2 <- ggplot(data=iris, aes(x = Sepal.Length, y = Petal.Width)) + geom_point(aes(color=Species, shape=Species))
compare(scatter, scatter2)
FALSE [TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE]
model treated as list
[layers] [1] model treated as character
[scales] model treated as character
[mapping] model treated as list
[mapping] [y] model treated as character
[coordinates] model treated as character
[facet] model treated as character
答案 1 :(得分:1)
如果这是测试用例的一部分,则可以使用扩展了“ testthat”的软件包“ vdiffr”。它用于测试用例的最新版本“ ggplot2”,因此您可以在Github中查看示例。它还在RStudio中安装了一个插件,以管理保存的测试用例并对失败的测试进行可视化比较。它运行良好,我在自己的程序包中使用它。它使用简化的svg设备将参考图保存到磁盘。
一个测试用例可能看起来像这样(其余的都类似于“ testthat”用例):
vdiffr::expect_doppelganger("test_001",
ggplot(data = cars, aes(speed, dist)) +
geom_point()
)
在某些情况下,除了来自软件包“ testthat”的图expect_known_output()
或expect_known_value()
可能会有所帮助,但我想并非在每种情况下都如此。