## Introduction to {targets} **ニッタ ジョエル** Workflow Meetup <span style = 'font-size: 120%;'>2022/01/12</span> <br><br><img src="https://docs.ropensci.org/targets/logo.svg" alt="drawing" height="350" style="float:right;margin:-200px 0px"> <br><br>https://joelnitta.com --- ## 自己紹介 .pull-left[ **ニッタ (新田)ジョエル** @joel_nitta https://joelnitta.com - [東京大学岩崎研究室](http://iwasakilab.k.u-tokyo.ac.jp/) - 特任助教 - 研究テーマ:シダ植物の<br>進化、生態学 - 趣味:マラソン ] .pull-right[ <img src="https://github.com/joelnitta/joelnitta-site/blob/master/static/media/headers/research_img2.jpg?raw=true" alt="drawing" height="400"/> ] --- ## アウトライン - {targets}の簡単な紹介 - ライブコーディング(その1) - 上級編 - ライブコーディング(その2) ↑ 先に`targets_vcf_example`のセットアップを行う https://github.com/joelnitta/targets_vcf_example --- ## {targets}とは? .pull-left[ - Rの**ワークフロー管理パケージ** - ワークフローの**必要なところだけを走らせる** - ワークフローを書く段階で<br>**パラレル化する** - 計算結果がコードとデータと一致していることを証明する ] <img src="https://docs.ropensci.org/targets/logo.svg" alt="drawing" height="350" style="float:right"> --- ## Resources 資料 - Github https://github.com/ropensci/targets - Package website https://docs.ropensci.org/targets/ - User manual https://books.ropensci.org/targets/ - Targetopia https://wlandau.github.io/targetopia/ - {tarchetypes} website https://docs.ropensci.org/tarchetypes/ - [@u_ribo](https://twitter.com/u_ribo)さんの[発表](https://speakerdeck.com/s_uryu/workflow-management-with-targets) --- ## Live Coding - `tar_script()`: ワークフロープランを書く - `tar_visnetwork()`: ワークフローロを確認する - `tar_make()`: ワークフローを実行する - `tar_load()`: ターゲットを読み込む - `tar_outdated()`:次回走らせるところを予測する --- class: inverse, center, middle # Live Coding --- class: inverse, center, middle # Advanced topics 上級編 --- ## Amazon S3 storage cloudの上に`_targets/`を置くことができるらしい https://books.ropensci.org/targets/storage_amazon.html --- ## GH Actions パイプラインの実行をgithub actionsに任せることができるらしい https://docs.ropensci.org/targets/reference/tar_github_actions.html --- ## markdown-targets `_targets.R`をいじらないで、全てRmarkdownで動かすことができる<br>らしい https://books.ropensci.org/targets/markdown.html --- ## shinyでワークフローの進行状況を<br>モニターする shinyのアプリで**リアルタイムに**ワークフローの進行状況を<br>確認することができるらしい https://docs.ropensci.org/targets/reference/tar_watch.html --- ## Branching: 一気に複数のターゲットを指定する `tar_target()`の`pattern`関数を使う ```r list( tar_target(num_obs, c(5, 10, 1000)), tar_target( rand_dat, runif(num_obs), pattern = map(num_obs) ), tar_target( mean_val, mean(rand_dat), pattern = map(rand_dat) ) ) ``` --- ## Branching: 一気に複数のターゲットを指定する ```r tar_make() ``` ``` ## • start target num_obs ## • built target num_obs ## • start branch rand_dat_63209a1b ## • built branch rand_dat_63209a1b ## • start branch rand_dat_92aebc0d ## • built branch rand_dat_92aebc0d ## • start branch rand_dat_d9be0f3e ## • built branch rand_dat_d9be0f3e ## • built pattern rand_dat ## • start branch mean_val_6f3bc7ea ## • built branch mean_val_6f3bc7ea ## • start branch mean_val_7dfbcf2a ## • built branch mean_val_7dfbcf2a ## • start branch mean_val_73aee7e9 ## • built branch mean_val_73aee7e9 ## • built pattern mean_val ## • end pipeline ``` ``` ## mean_val_6f3bc7ea mean_val_7dfbcf2a mean_val_73aee7e9 ## 0.3007010 0.4023032 0.4935173 ``` --- ## Branching: 一気に複数のターゲットを指定する ```r tar_read(mean_val) ``` ``` ## mean_val_6f3bc7ea mean_val_7dfbcf2a mean_val_73aee7e9 ## 0.3007010 0.4023032 0.4935173 ``` --- ## HPC・パラレル化 ローカルで複数コアを使う場合は`_targets.R`に以下を加える: ```r # 並列分散処理のパケージ library(future) library(future.callr) # 並列バックエンドを設定する plan(callr) ``` そして、このようなコードで実行させる: ```r tar_make_future(workers = 4) # 例えば、四つのプロセスを同時に走らせる ``` ブランチ(`tar_target(..., pattern = map(...))`によって設定されたターゲット)が自動的に並列に処理される! --- ## HPC・パラレル化 サーバーで使う場合:[{clustermq}](https://github.com/mschubert/clustermq)を使う https://books.ropensci.org/targets/hpc.html#clustermq-remotely --- ## External files `tarchetypes::tar_file()`を使う ```r list( tar_file( data_file, "data/some_data.csv" # ファイルのハッシュ値を計算する ), tar_target( data, read_csv(data_file) ) ) ``` 生データ`data/some_data.csv`をいじると、targetsが感知して、また下流のターゲットを作り直す --- ## Bioinformatics workflows condaとdocker(あるいはsingularity)を使って、完全に再現可能なワークフローにする - `tar_file()`を連続させることによってワークフローの<br>インプット・アウトプットの関係を作っていく https://www.joelnitta.com/posts/2021-11-16_r-bioinfo-flow/ https://github.com/joelnitta/targets_vcf_example --- ## Bioinformatics workflows 私の[`run_docker()`](https://github.com/joelnitta/targets_vcf_example/blob/2edc00b8dcdabdc8962b4b2debcd2e8300fe5cb1/R/utils.R#L34)(主に`babelwhale::run()`を使っている)を<br>使えば、簡単にコマンドを包める(wrapする) 例えば、`bwa mem` ```r run_docker( container_id = "quay.io/biocontainers/bwa:0.7.8--hed695b0_5", command = "bwa", args = c( "mem", file = "data/ref/ref.fasta", # volumeの指定要らず! file = "data/reads/read_1.fasta", file = "data/reads/read_2.fasta"), stdout = "results/aligned_reads.sam" ) ``` --- class: inverse, center, middle # Live Coding