niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

(R) 再現性を確保するためにdrakeパッケージを使おう、らしいですね…?

まだよく分からない…

先日の記事

niszet.hatenablog.com

にもちょっとだけ書いた、drakeってパッケージ、

github.com

を、つかいはじめているものの、イマイチ使い方を理解しきれておりませぬ。

そんななか、TwitterのShinyappsRecentのつぶやき、

で、shinyのアプリでdrakeのtutorialがあることを知りました。

https://krlmlr.shinyapps.io/cooking-drake-tutorial/

正直drakeパッケージ公式のvignetteとかReadmeは読んでも良く分からないところがあるので(なんとなくはわかる)、手を動かして体験できるのは良いですね。

一応、Rmdに対しても使えるようで、 Rmdファイルの例として、テンプレートで生成される下記のコードを含んだファイルをhoge.Rmdとして保存し、

---
title: "Untitled"
author: "niszet"
date: "2018年4月29日"
output: html_document
---

\```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
\```

## R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

\```{r cars}
summary(cars)
\```

## Including Plots

You can also embed plots, for example:

\```{r pressure, echo=FALSE}
plot(pressure)
\```

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.

以下でplanを作成、make()してconfigを作って依存関係を表示すると、

plan <- drake_plan(
  rmarkdown::render(
    knitr_in("hoge.Rmd"),
    output_file=file_out("hoge.html"),
    encoding = "UTF-8"
  )
)
make(plan)
config<-drake_config(plan)
vis_drake_graph(config)

f:id:niszet:20180429201445p:plain

のように表示されました。ので、Rmdであっても一応動くようです。

20180430 1510追記

ここで、Rmd中に日本語が含まれているとNGという形で書いていたのですが、yutannihilationさんから

とご指摘いただき、試してみたところうまくいきました。Rmd->htmlへの変換のrender()部分でencodingの指定さえしていれば変換自体は問題なく動作しました。上記コードにはそのオプションも追記している形で、Rmdの日付も日本語の表記にしておきました。お試しください。

ただし、drake自体は日本語を受け付けていないような挙動があったので、調査中です。ソース中のコメントに日本語が入っているとダメだった気がするので…。これの再現性を確認しないといけないですね…。

あと、Rmd中でデータのimportをしている場合にその依存性を検知していない(はず)です。具体的にはread_csv()'とかで読んでいるファイルが変化してもmake()が反応しない、とか。これも調査中です。最終的には成果物をRmdにして管理したいので、drakeとRmdをうまく共存させたいのですよね。単なるプロジェクトとしてならばdrake`で十分管理できるとは思うのですが。

パッケージ化とかパッケージのバージョン管理とかの話もあるし、どのタイミングで何をどう管理するのが良いのか?がまだ良く分かりません…精進。。。

20180430 1510 追記ココまで

そして、たまに暗黙の依存関係を解決できない旨のwraningが出たり、htmlを出力出来ているのにdrake側からそれを検知できないということがあります。

再現可能なコードを作ってissue投げたいんですが、うまく再現しないこともあるのでちょっとコードを理解しないとこれは厳しいか…??

再現可能な環境の作成は大事なので、ちょっと頑張る…かも。

Enjoy!!