ワークフローオブジェクトの読み込み
最終更新日:2024-11-19 | ページの編集
所要時間: 12分
概要
質問
- ワークフローはどこで実行されますか?
- ワークフローによって作成されたオブジェクトをどのように検査できますか?
目的
-
targets
がワークフローを実行する場所とその理由を説明する - ワークフローによって作成されたオブジェクトをRセッションにロードできるようにする
エピソードの概要: 作成したオブジェクトにアクセスする方法を示す
ワークフローはどこで実行されますか?
私たちはちょうど最初のワークフローを実行しました。
今、出力を見たいと思うでしょう。 しかし、オブジェクトの名前(例えば
penguins_data
)を呼び出すだけではエラーが発生します。
R
penguins_data
エラー
Error in eval(expr, envir, enclos): object 'penguins_data' not found
ワークフローの結果はどこにありますか?
-
targets
が別のRセッションで実行されるという概念を強調するために、penguins_data
を実行しようとしてエラーになるふりをして驚きを装い、それを教育的な瞬間として使用することができます(エラーは教育の一部です!)。
ワークフローの結果が見えないのは、targets
がワークフローを別のRセッションで実行するためであり、そのセッションと対話することができないからです。
これは再現性のためです—ワークフローによって作成されたオブジェクトは、プロジェクト内のコードのみに依存すべきであり、Rに対してインタラクティブに与えたコマンドには依存すべきではありません。
幸いにも、targets
にはワークフローによって作成されたオブジェクトを現在のセッションにロードするために使用できる2つの関数、tar_load()
と tar_read()
があります。
これらがどのように機能するか見てみましょう。
tar_load()
tar_load()
は、ワークフローによって作成されたオブジェクトを現在のセッションにロードします。
最初の引数はロードしたいオブジェクトの名前です。 これを使用して
penguins_data
をロードし、summary()
でデータの概要を取得しましょう。
R
tar_load(penguins_data)
summary(penguins_data)
出力
species bill_length_mm bill_depth_mm
Length:342 Min. :32.10 Min. :13.10
Class :character 1st Qu.:39.23 1st Qu.:15.60
Mode :character Median :44.45 Median :17.30
Mean :43.92 Mean :17.15
3rd Qu.:48.50 3rd Qu.:18.70
Max. :59.60 Max. :21.50
tar_load()
は副作用—望むオブジェクトを現在のRセッションにロードするために使用されます。
実際には値を返しません。
tar_read()
tar_read()
は、ワークフローによって作成されたオブジェクトを取得するために使用される点では
tar_load()
と似ていますが、tar_load()
とは異なり、それらを直接出力として返します。
penguins_csv_file
で試してみましょう。
R
tar_read(penguins_csv_file)
出力
[1] "/home/runner/.local/share/renv/cache/v5/linux-ubuntu-jammy/R-4.4/x86_64-pc-linux-gnu/palmerpenguins/0.1.1/6c6861efbc13c1d543749e9c7be4a592/palmerpenguins/extdata/penguins_raw.csv"
penguins_csv_file
の内容がすぐに表示されます。
しかし、それは環境にロードされていません。 今
penguins_csv_file
を実行しようとすると、エラーが発生します:
R
penguins_csv_file
エラー
Error in eval(expr, envir, enclos): object 'penguins_csv_file' not found
どの関数をいつ使用するか
tar_load()
はオブジェクトをロードしてそれらを操作したいときにより便利です。
tar_read()
はオブジェクトを即座に検査したいときにより便利です。
targets キャッシュ
Rセッションを終了し、再起動して tar_load()
または
tar_read()
を使用すると、ワークフローオブジェクトをまだロードできることに気づくでしょう。
言い換えれば、ワークフローの出力はRセッション間で保存されています。
これはどのように可能なのでしょうか?
プロジェクトに新しいフォルダ _targets
が現れたことに気づいたかもしれません。 これはtargets
キャッシュです。
ワークフローの出力すべてが含まれています。これにより、Rを終了して再起動した後でもワークフローによって作成されたターゲットをロードできるのです。
キャッシュの内容を手動で編集してはいけません(1つの例外を除く)。 そうすると、分析の再現性が失われます。
このルールの唯一の例外は、_targets/user
という特別なサブフォルダです。
このフォルダはデフォルトでは存在しません。
必要であれば作成し、任意のものを中に入れることができます。
一般的に、_targets/user
はデータや出力のようなコードではないファイルを保存するのに適しています。
もし _targets/user
に保持する必要があるものが何もない場合、単に _targets
フォルダ全体を削除することでワークフローを「リセット」することが可能です。
もちろん、これはすべてを再実行する必要があることを意味するため、軽率に行わないでください!
まとめ
-
targets
のワークフローは別の非対話型Rセッションで実行されます -
tar_load()
はワークフローオブジェクトを現在のRセッションにロードします -
tar_read()
はワークフローオブジェクトを読み取り、その値を返します -
_targets
フォルダはキャッシュであり、一般的には手動で編集すべきではありません