ワークフローオブジェクトの読み込み

最終更新日: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 フォルダはキャッシュであり、一般的には手動で編集すべきではありません