目的

targets バージョン 0.5.0 でリリースされる Target Markdown の機能を利用すると、R Markdown 文書中で targets パイプラインを定義できる。

しかし、ドキュメントに示されている例ではターゲットを定義するコードとその実行結果が離れた位置に来てしまう。コードと結果の対応をわかりやすく示すためには近くに表示したい。

そこで、ターゲット定義コードの近くに実行結果を表示するにはどうすれば良いか調べる。

わかったこと


セットアップ

まず targets をロードする

library(targets)

もし過去に生成されたパイプライン定義ファイル(_targets_r フォルダ)が残っていたら削除しておく

tar_unscript()

もし過去のパイプライン実行結果(_targets/ フォルダ)が残っていたら削除する

tar_destroy()

グローバルオブジェクトを定義する

targets のオプション設定やグローバル関数・グローバル変数の定義には targets チャンクに tar_globals = TRUE のオプションをつける。

このチャンクを対話モードで実行すると普通にRコードとして実行され、グローバル環境の変数に値が代入される。 非対話モードで実行すると _targets_r/globals/ フォルダにスクリプトファイルが作成される。

options(tidyverse.quiet = TRUE)
tar_option_set(packages = c("biglm", "dplyr", "ggplot2", "readr", "tidyr"))
create_plot <- function(data) {
  ggplot(data) +
    geom_histogram(aes(x = Ozone), bins = 12) +
    theme_gray(24)
}
#> Established _targets.R and _targets_r/globals/example-globals.R.

ターゲットを定義する

targets チャンクに tar_globals オプションをつけない場合、target オブジェクトの定義を表す。

このチャンクを対話モードで実行すると、単にグローバルオブジェクト raw_data にコマンド airquality の戻り値が代入される。 非対話モードで実行すると、_targets_r/targets/ フォルダにターゲット定義用のスクリプトが生成される。

tar_target(raw_data, airquality)
#> Established _targets.R and _targets_r/targets/raw-data.R.

パイプラインの確認と実行

上記の targets チャンクが非対話モードで実行してあれば、targets パイプラインが定義されている。

この時点でパイプラインを可視化してみる。

tar_visnetwork()

この時点でパイプラインを実行してみる

tar_make()
#> • start target raw_data
#> • built target raw_data
#> • end pipeline

もう一度パイプラインを可視化してみる

tar_visnetwork()

パイプラインにターゲットを追加する

targets チャンクでパイプラインにターゲットを追加する

list(
  tar_target(data, raw_data %>% filter(!is.na(Ozone))),
  tar_target(hist, create_plot(data))
)
#> Established _targets.R and _targets_r/targets/downstream-targets.R.

またパイプラインを可視化する

tar_visnetwork()

既に実行済みのターゲット raw_data は “Up to date” の状態に、 新しく追加されたターゲット data, hist は “Outdated” の状態になっている。

パイプラインを再実行する。

tar_make()
#> ✓ skip target raw_data
#> • start target data
#> • built target data
#> • start target hist
#> • built target hist
#> • end pipeline

“Up to date” だったターゲット raw_data の実行はスキップされ、新しいターゲット data, hist が実行される。

また可視化する

tar_visnetwork()

すべて “Up to date” になっている。

ターゲット hist の実行結果を読み取って表示する

tar_read(hist)

tar_simple = TRUE オプション

また targets チャンクで新たなターゲットを追加する。 このとき tar_simple = TRUE オプションを利用する。 このチャンクは tar_target(fit, biglm(Ozone ~ Wind + Temp, data)) でターゲットを定義するのと同じ意味になる。

tar_target(fit, {
  biglm(Ozone ~ Wind + Temp, data)
})
#> Defined target fit automatically from chunk code.
#> Established _targets.R and _targets_r/targets/fit.R.

またパイプラインを可視化

tar_visnetwork()

パイプラインを再実行

tar_make()
#> ✓ skip target raw_data
#> ✓ skip target data
#> • start target fit
#> • built target fit
#> ✓ skip target hist
#> • end pipeline

また可視化

tar_visnetwork()