Suppress Formula Evalメッセージは、自動評価を実行するかどうかを指定するブール値の引数をとります。データテーブルに多数の変更を加える必要があり、ステップ間で計算式が更新されるのを待ちたくない場合は、式の自動評価機能をオフにできます。
dt << Suppress Formula Eval( 1 );
dt << Suppress Formula Eval( 0) ;
すべてのデータテーブルで自動評価をさせないようにするには、Suppress Formula Evalコマンドを使い、全体にわたって自動評価をオフにします。このコマンドの機能は、前のメッセージと同じですが、データテーブルオブジェクトには送りません。
Suppress Formula Eval( 1 ); // セッション内のすべての計算式を静的にする
Suppress Formula Eval( 0 ); // セッション内のすべての計算式を動的にする
計算式は、列に組み込まれているときは評価されません。強制的に評価しようとしても、今度はバックグラウンドで評価されます。スクリプト実行中の列の値に依存するような場合は、これが問題となる可能性があります。評価を制御する手段が必要な場合は、EvalFormulaコマンドまたはRun Formulasコマンドを使用します。
1つの列の評価を実行するには、その列にEval Formulaコマンドを送ります。計算式の節の後で、列を作成するコマンド内でも実行できます。その例を示します。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "比率",
Numeric,
Formula( :Name("身長(インチ)") / :Name("体重(ポンド)") ),
Eval Formula
);
dt << Run Formulasは、他の計算式を評価した後で評価するために保留されている式も含め、データテーブルのすべての式の評価を実行します。この関数は、すべての列の計算式を実行する場合に便利です。
ヒント: この方法は、EvalFormulaより適しています。EvalFormulaも計算式を評価しますが、バックグラウンドで再評価されないようにはしません。バックグラウンドで行われるタスクは、計算式が正しい順序で評価されるよう、十分な注意を払う必要があります。
Run Formulasコマンドをデータ列に送った場合は、コマンドを送った時点で評価が実行されますが、そのためにスケジュール設定されてペンディング中だった計算式が本来の時間に評価されなくなるわけではありません。そのため、コマンドをデータテーブルとデータ列にも送ると、計算式が2回評価される場合があります。2回評価されることは、乱数関数が含まれている計算式では望ましい場合もありますが、設定されている乱数シード値に依存する場合は望ましくないこともあります。同一の値のセットを生成させるために乱数関数とRandom Reset(seed)の機能を使用している場合には、Run Formulasコマンドを使うと2回目の評価を行わずに済みます。
col << Set Each Value(expression)は、データテーブルの行ごとに式を計算し、結果を列に割り当てます。この式は、計算式としては格納されません。