Evaluate DAT 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Evaluate DAT のテーブルセル Python 式評価による新テーブル生成を示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – テーブル各セルを Python 式として評価し新テーブルを生成

Evaluate DATは、入力テーブルの各セルを Python 式として評価し、計算結果を新しいテーブルに出力する DATです。第 1 入力にデータを、第 2 入力に数式を渡せば「データ × 数式」のマトリックス評価ができ、Output Table Size でどちらのテーブル形状を採用するかを切替えられます。OutputInput Data にすると評価を止めて入力をそのままパススルーするため、運用中に評価機構を簡単に無効化できます。

主な用途 🎯

  • 設定テーブルの各セルを Python 式として一括評価し、計算結果を新しい DAT に出力
  • 第 2 入力に Formula DAT を渡してデータと式を分離し、テーブル × 数式のマトリックス計算を実現
  • Expression パラメータの式テンプレートop('constant1')['chan']absTime.frame を参照し動的テーブルを生成
  • Input Data モードでセル評価を停止し、入力テーブルをそのままパススルーする運用切替
  • Convert Backslash Characters\n / \t 等のエスケープシーケンスを実数の制御文字に展開

データフロー 🔄

入力 1: データ DAT (テーブル / テキスト)
[+ 入力 2: 数式 DAT (各セルが式)]

各セルを Python 式として評価 (eval 相当、コンパイル済み)

出力 DAT: 同サイズの新テーブル (評価結果文字列)

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Evaluate Page 📋

入力データと数式 DAT 📥

Input Data DAT .dat 📋
– 第 1 入力 (ワイヤ接続) の代わりに使う データ DAT をパス指定
– 未指定の場合は第 1 入力のテーブルがデータソースとして使われる

Expressions DAT .datexpr 🧮
– 第 2 入力の代わりに使う 数式 DAT をパス指定
– 各セルが Python 式の文字列で、データ DAT の対応セルに対し評価される

出力モード .output 🎚️

DAT から出力する内容の形式を決定するメニュー

項目 内部名 説明
Evaluate .evaluate 入力データを Python 式としてコンパイル評価し、結果を出力 (通常運用)
Input Data .data 第 1 入力をそのままパススルー (評価機構を一時的に無効化したいとき)

Expression (式テンプレート) .expr ✏️

Expressions DAT が未指定のときに、入力データ DAT の各セルに適用される Python 式:

  • Expression 文字列: Expressions DAT (第 2 入力) を渡さない場合に、全セルに適用される単一の Python 式 を直接書く。op('constant1')['chan0'] / absTime.frame / セル参照 me.inputCell.val 等を利用可能

出力テーブルサイズ .outputsize 📐

Output が Evaluate のとき、出力テーブルの行数・列数をどちらの入力から取るかの選択

項目 内部名 説明
Input 1 (Data) .in1 出力サイズを第 1 入力 (データ DAT) のサイズに合わせる (データ寄りの運用)
Input 2 (Expressions) .in2 出力サイズを第 2 入力 (数式 DAT) のサイズに合わせる。数式 DAT がデータ DAT より大きい場合、データ DAT の最終セルが残りの式評価に再利用される

※ 注意: Formula DAT が Input DAT より大きい場合、入力データの各行・各列の最終セルが残りの式評価に繰り返し使われます。意図しない値の使い回しに注意。

引用元: 公式 docs

依存監視と文字エスケープ 🔁

Monitor Data Dependencies .dependency 🔍
– On (デフォルト) 時、式中で参照されたノード (op(...) 等) や時刻依存 (absTime 等) を監視し、それらが変化した瞬間に DAT を cook
– Off 時は入力 DAT の変化のみを cook 契機とし、無駄な再計算を抑制 (式が静的なときの高速化)

Convert Backslash Characters .backslash 🔣
– On 時、出力文字列中の \n を改行・\t をタブ等の実数の制御文字に展開
– 入力 DAT がテーブル形式の場合、\n / \t空白に置換される (テーブルの行・列区切りと衝突しないため)


Common Page 🔧

Language .language 📝

DAT が動作するスクリプト言語の決定方法

項目 内部名 説明
Input .input 入力 DAT のスクリプト言語を使用
Node .node この DAT 自身のスクリプト言語を使用

Edit/View Extension .extension 📄

外部エディタに公開するファイル拡張子の選択

項目 内部名 説明
dat .dat 汎用的なファイル拡張子 dat を使用
From Language .language DAT のスクリプト言語に応じた拡張子を自動選択
Custom Extension .custom Custom Extension で指定したカスタム拡張子を使用

Custom Extension .customext 🔤

Edit/View ExtensionCustom Extension のときに適用される拡張子:

  • Custom Extension 文字列: Edit/View Extensioncustom のときに使用される任意のファイル拡張子

Word Wrap .wordwrap 🔁

ノード表示でのワードラップ (折り返し) の有効化

項目 内部名 説明
Input .input 入力 DAT の Word Wrap 設定を継承
On .on Word Wrap を有効化 (ノード上の長い行を折り返し表示)
Off .off Word Wrap を無効化 (折り返さずそのまま表示)

実践アイデア 💡

Example 1: 設定テーブルの Python 式を一括評価して数値テーブルへ 🧮

Table DAT (式入りセル) → Evaluate DAT (Output=Evaluate) → Select DAT / CHOP
  1. Table DAT3*4 / op('constant1')['chan0'] / absTime.frame % 60 等の式文字列を埋めたテーブルを作成
  2. Evaluate DAT を後段に接続し、OutputEvaluate に設定
  3. 各セルが Python 式として評価され、計算結果の数値文字列が出力テーブルに並ぶ
  4. DAT to CHOP や Select DAT で必要なセルだけを CHOP / 別 DAT へ引き渡す

Example 2: Formula DATとデータの行列計算 🔀

Table DAT (data) ─┐
                  ├→ Evaluate DAT (outputsize=in2) → 出力 DAT
Table DAT (formulas) ─┘
  1. 第 1 入力に数値のみのデータ DAT (例: センサー値や時系列値)、第 2 入力に各セル op('me').inputCell.val * 2 等の式 DAT を接続
  2. Evaluate DAT で Output Table SizeInput 2 (Expressions) に設定し、式 DAT のサイズを基準に出力
  3. 各セルで Python 式が評価され、データセルと式セルのペアごとに計算結果が並ぶ
  4. Formula DAT がデータ DAT より大きい場合は、データの最終セルが残りの式評価に再利用されるので、サイズ合わせは事前に Insert DAT 等で揃えておく

Example 3: Expressionで動的テーブルを生成 ⏱️

Constant CHOP → (参照) → Evaluate DAT (expr テンプレート) → Text TOP / Table DAT
  1. Expressions DAT (第 2 入力) を未接続にし、Evaluate DAT の Expression パラメータに単一の式 (例: op('constant1')['chan0'] * absTime.frame) を直接書く
  2. Monitor Data Dependencies を On のままにし、参照中の Constant CHOP の値変化や absTime の進行で再評価をトリガー
  3. 全セルに同じ式が適用されるため、テンプレ的に動的値を全行に展開できる
  4. 出力 DAT を Text TOP や別 DAT に渡して UI 表示・ロジック分岐に使う

関連オペレータ 🔗

類似機能OP 🔍

  • Substitute DAT — テキスト中の変数を式評価で置換する版 (セル単位ではなく文字列置換)
  • Script DAT — Python スクリプトで DAT を自由に加工できる汎用変換 DAT
  • Convert DAT — テーブル ⇄ テキスト変換や delimiter 変換に特化

組み合わせ推奨OP 🔄

  • Table DAT — データ・数式どちらの入力にも使う標準ペア
  • Text DAT — 単一式の Expression source や、出力をテキスト形式で扱うときに併用
  • Constant CHOP — Expression 中で op('constant1')['chan0'] として参照、Monitor Dependencies で値変化に追随
  • DAT to CHOP — Evaluate DAT の数値出力を CHOP チャンネルとして取り出す定番後段
  • Insert DAT — データ DAT と Formula DAT のサイズを事前に揃える前処理

前処理・後処理DAT 🎯


Info DAT情報 📊

Evaluate DAT は Info DAT による詳細情報取得に対応しています (num_rows / num_cols / total_cooks / cook_time 等の共通 DAT Info チャンネルを参照可能)。

DAT 固有情報 📋

  • num_rows: DAT の行数
  • num_cols: DAT の列数
  • type: DAT の型 (table / text)
  • is_table: テーブル形式の場合 1、テキスト形式の場合 0

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: 出力テーブルが空、または NameError / SyntaxError が出る
✅ Solution:

  • OutputEvaluate になっているか確認 (Input Data ではセル評価は走らずパススルーになる)
  • 各セルが有効な Python 式かを確認 (文字列リテラルなら 'foo' のようにクォートで囲む)
  • 式中で参照しているノード (op('constant1') 等) のパス・チャンネル名が現存するか確認
  • Textport / Console でエラースタックトレースを確認し、該当行・列のセル内容を修正

❌ Problem: Formula DAT がデータ DAT より大きく、末尾セルが繰り返し使われる
✅ Solution:

  • Insert DAT でデータ DAT 側に空行・空列を追加し、Formula DAT とサイズを揃える
  • Output Table SizeInput 1 (Data) に切替えて、データ側のサイズで出力を確定 (Formula DAT の余剰行・列が無視される)
  • 前段で Convert DAT や Script DAT を使ってデータ DAT のサイズを動的に拡張

❌ Problem: \n / \t が改行・タブにならず空白に変わる
✅ Solution:

  • 入力 DAT が テーブル形式 の場合、Convert Backslash Characters\n / \t を空白に置換する仕様 (公式仕様)
  • 改行・タブを保持したい場合は Text DAT 形式の入力に変更してから Evaluate DAT に渡す
  • 後段で Convert DAT を使い、明示的に区切り文字を再付与する

❌ Problem: 毎フレーム不要に再計算が走り重い
✅ Solution:

  • Monitor Data Dependencies を Off にし、入力 DAT 変化のみを cook 契機に限定
  • 式中で absTime.frame / absTime.seconds 等の時刻依存関数を多用していないか確認 (依存があれば毎フレーム再評価される)
  • 重い式は前段の Script DAT に逃がし、必要なときだけ Python で計算

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました