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

最終更新日:2026-10-23 | ページの編集

所要時間: 15分

概要

質問

  • ワークフローはどこで実行されますか?
  • ワークフローによって作成されたオブジェクトをどのように検査できますか?

目的

  • targets がワークフローを実行する場所とその理由を説明する
  • ワークフローによって作成されたオブジェクトをRセッションにロードできるようにする

エピソードの概要: 作成したオブジェクトにアクセスする方法を示す

ワークフローはどこで実行されますか?


私たちはちょうどワークフローを実行しました。 今、出力を見たいと思うでしょう。 しかし、オブジェクトの名前(例えば penguins_data)を呼び出すだけではエラーが発生します。

R

penguins_data

エラー

Error:
! object 'penguins_data' not found

ワークフローの結果はどこにありますか?

  • targets が別のRセッションで実行されるという概念を強調するために、penguins_data を実行しようとしてエラーになるふりをして驚きを装い、それを教育的な瞬間として使用することができます(エラーは教育の一部です!)。

ワークフローの結果が見えないのは、targets がワークフローを別のRセッションで実行するためであり、そのセッションと対話することができないからです。 これは再現性のためです—ワークフローによって作成されたオブジェクトは、プロジェクト内のコードのみに依存すべきであり、Rに対してインタラクティブに与えたコマンドには依存すべきではありません。

幸いにも、targets にはワークフローによって作成されたオブジェクトを現在のセッションにロードするために使用できる関数、tar_load() があります。 どのように機能するか見てみましょう。

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
 N.unique :  3   1st Qu.:39.23   1st Qu.:15.60
 N.blank  :  0   Median :44.45   Median :17.30
 Min.nchar: 33   Mean   :43.92   Mean   :17.15
 Max.nchar: 41   3rd Qu.:48.50   3rd Qu.:18.70
                 Max.   :59.60   Max.   :21.50  

tar_load() は副作用—望むオブジェクトを現在のRセッションにロードするために使用されます。 実際には値を返しません。

targets キャッシュ


Rセッションを終了し、再起動して tar_load() を使用すると、ワークフローオブジェクトをまだロードできることに気づくでしょう。 言い換えれば、ワークフローの出力はRセッション間で保存されています。 これはどのように可能なのでしょうか?

プロジェクトに新しいフォルダ _targets が現れたことに気づいたかもしれません。 これはtargets キャッシュです。 ワークフローの出力すべてが含まれています。これにより、Rを終了して再起動した後でもワークフローによって作成されたターゲットをロードできるのです。

キャッシュの内容を手動で編集してはいけません。 そうすると、分析の再現性が失われます。

単に _targets フォルダ全体を削除することで、ワークフローを「リセット」することが可能です。 もちろん、これはすべてを再実行する必要があることを意味するため、軽率に行わないでください!

チャレンジ

オプションのチャレンジ: tar_read()

このチャレンジはオプションです。

tar_script() が作成した _targets.R ファイルの先頭のコメントを見ると、別の関数 tar_read() について書かれています。 tar_load() と同様に、ワークフローによって作成されたオブジェクトを取得します。

tar_read(penguins_csv_file) を試し、その後 penguins_csv_file を実行してみてください。 何が表示されますか? ターゲットの内容をオブジェクトとしてRセッションにロードすることと、読み取ることの違いは何でしょうか? どのような場合に一方ではなくもう一方を使いたくなるでしょうか?

tar_read() はターゲットの値を返すので、すぐに表示されます:

R

tar_read(penguins_csv_file)

出力

[1] "data/penguins_raw.csv"

しかし、それは環境にロードされていないため、penguins_csv_file を実行しようとするとエラーが発生します:

R

penguins_csv_file

エラー

Error:
! object 'penguins_csv_file' not found

対照的に、tar_load() はターゲットと同じ名前のオブジェクトをRセッション内に作成し、目に見える値は何も返しません。 その後は、そのオブジェクトを何度でも使用できます。

tar_load() はオブジェクトをロードしてそれらを操作したいときにより便利です。 tar_read() はターゲットを即座に検査したいときや、その値を別の名前のオブジェクトに保存したいとき(たとえば my_data <- tar_read(penguins_data))により便利です。

まとめ
  • targets のワークフローは別の非対話型Rセッションで実行されます
  • tar_load() はワークフローオブジェクトを現在のRセッションにロードします
  • _targets フォルダはキャッシュであり、一般的には手動で編集すべきではありません