vdiff とは
vdiffr とは プロットのテストをサポートしてくれる R 言語の package です。
プロットのテストを行うことは,まだあまり一般的ではないと思うのですが,
ggplot や ggridges (旧名ggjoy) ではこの vdiffr を用いてプロットのテストを行っています。
vdiffr 利用方法実例
次に実例でもって vdiffr の利用の仕方を示します。
(RStudio を用いて vdiffr でテストをするだけの package を作ります。)
-
RStudio の package の雛形を作る機能で下記のように入力し Create Project button 押下 (
R/hello.R
などのパッケージ雛形ができるはずです) -
install.packages(c("devtools", "testthat", "vdiffr"))
-
下記の内容で
tests/testthat/test-hello.R
を作成 (テストする内容はhelloではなくplotなので本来renameするべきなのですが省略します)context("Histograms") disp_hist_base <- function() hist(mtcars$disp) vdiffr::expect_doppelganger("Base graphics histogram", disp_hist_base)
-
RStudio の Console View で
vdiffr::validate_cases()
を実行。これでテストの正答となるリファレンス画像base-graphics-histogram.svg
が `tests/figs/histograms' に出来上がります。 -
この状態で
Ctrl+Shift+T
もしくは Build View の More メニュー下のTest Package
を実行してみてください。下記画像のように エラーは出ないはずです。 -
次にリファレンス画像
base-graphics-histogram.svg
を適当な画像 (ただしそのファイル名はbase-graphics-histogram.svg
にrenameしてください) に置き換えてもう一度Ctrl+Shift+T
もしくは Build View の More メニュー下のTest Package
を実行してみてください。下記画像のようにテストが失敗するはずです。 -
- の適当な画像(リファレンスとは異なる画像) を元のリファレンス画像
base-graphics-histogram.svg
に戻すと再びテスト結果が問題無くなるはずです。
- の適当な画像(リファレンスとは異なる画像) を元のリファレンス画像
まとめ
RStudio と vdiffr を使うと簡単にプロットのテストが追加できます。
是非プロットもテストしてみてください。
sessionInfo
> sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] vdiffrSample_0.1.0 gdtools_0.1.6 testthat_1.0.2
loaded via a namespace (and not attached):
[1] Rcpp_0.12.14 rstudioapi_0.7 fontquiver_0.2.1 xml2_1.1.1 magrittr_1.5
[6] roxygen2_6.0.1 devtools_1.13.4 xtable_1.8-2 R6_2.2.2 rlang_0.1.4
[11] fontBitstreamVera_0.1.1 stringr_1.2.0 tools_3.4.3 withr_2.1.0 htmltools_0.3.6
[16] commonmark_1.4 yaml_2.1.15 digest_0.6.12 crayon_1.3.4 shiny_1.0.5
[21] purrr_0.2.4 vdiffr_0.2.1 htmlwidgets_0.9 mime_0.5 memoise_1.1.0
[26] glue_1.2.0 stringi_1.1.6 compiler_3.4.3 svglite_1.2.1 httpuv_1.3.5
[31] fontLiberation_0.1.0
>