Edited at
RDay 6

RStudio と vdiffr でプロットもテストしよう

More than 1 year has passed since last update.


vdiff とは

vdiffr とは プロットのテストをサポートしてくれる R 言語の package です。

プロットのテストを行うことは,まだあまり一般的ではないと思うのですが,

ggplot や ggridges (旧名ggjoy) ではこの vdiffr を用いてプロットのテストを行っています。


vdiffr 利用方法実例

次に実例でもって vdiffr の利用の仕方を示します。

(RStudio を用いて vdiffr でテストをするだけの package を作ります。)



  1. RStudio の package の雛形を作る機能で下記のように入力し Create Project button 押下 (R/hello.R などのパッケージ雛形ができるはずです)



  2. install.packages(c("devtools", "testthat", "vdiffr"))



  3. 下記の内容で 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)


  4. RStudio の Console View で vdiffr::validate_cases() を実行。これでテストの正答となるリファレンス画像 base-graphics-histogram.svg が `tests/figs/histograms' に出来上がります。



  5. この状態で Ctrl+Shift+T もしくは Build View の More メニュー下の Test Package を実行してみてください。下記画像のように エラーは出ないはずです。




  6. 次にリファレンス画像 base-graphics-histogram.svg を適当な画像 (ただしそのファイル名は base-graphics-histogram.svg にrenameしてください) に置き換えてもう一度 Ctrl+Shift+T もしくは Build View の More メニュー下の Test Package を実行してみてください。下記画像のようにテストが失敗するはずです。




    1. の適当な画像(リファレンスとは異なる画像) を元のリファレンス画像 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
>