列の数式が遅くなる: 計算が完了するまで待つ方法こんにちは。生データをデータ テーブル (dt1) にインポートし、その後、仕様制限がある別のデータ テーブル (dt2) を開くという状況に遭遇しました。仕様制限テーブルには USL と LSL のみがあります。ターゲット仕様制限 (mean(USL,LSL)) である新しい計算列を dt2 に挿入します。次に、生データ dt1 のすべての行をループし、テストの名前と仕様制限の一致が得られた場合は、列プロパティに仕様制限を設定します (たとえば、col << Set Property( "Spec Limits", { LSL( myLSLx )、USL( myUSLx )、ターゲット( mytargetx )、 );)... 次に、スペック ファイル dt2 を保存せずに閉じます。
私が抱えている問題は、計算列 (dt2:_Target) の速度が十分ではなく、新しい計算列 ("_Target"...) を作成した直後に値を読み取ろうとすると、すべて空の値が取得されてしまうことだと思います。dt2 ファイルを開いたままにすると、計算列「_Target」に正しい値が表示されます。dt2で遊んでみました<< データ更新開始;それも機能しませんが、スクリプト内の間違った場所にそれを配置している可能性がありますか?唯一の回避策は、新しい列に数式を使用せず、スクリプトでターゲット値を計算し、すべての行のインデックスを作成して仕様ファイルに格納することです。
私の質問の根本は、行/列の特定の値を読み取る前に、すべての列の計算が完了するまで待ってもよいでしょうか?ということです。
動作しません
例えば、
New Column( "_Target",Numeric,"Continuous",Format( "Best", 12 ),Formula(If( Is Missing( :_LSL ) | Is Missing( :_USL ),
Empty(),
Mean( :_LSL, :_USL )
)
回避策
例えば、
dt2 = current data table();
New Column( "_Target", Numeric, "Continuous");
dt2_rows = nrows();
for (i=1, i<=dt2_rows, i++,
if(or(!is missing(dt2:_LSL[i]),!is missing(dt2:_USL[i])),
dt2:_Target[i] = ((dt2:_LSL[i]) + (d2t:_USL[i])) / 2;
,
);
Re: 列の数式が遅い: 計算が完了するまで待つ方法これは単純な「積み上げ」コメントです。@txnelsonの式は、あなたが提供した式よりも太く実行されます。列の式は、for ループよりも高速に実行されます。 また、JMP は空の値を持つ計算で empty() を返すため、条件ステートメントは必要ありません。 したがって、いずれか一方または両方の値が空の場合、(:USL + :LSL)/2 は空になります。
これは単なる参考です。
Re: 列の数式が遅い: 計算が完了するまで待つ方法このメッセージはスクリプト ガイドには説明されていません。 これについては、「JSL 構文ガイド」で説明されています。 最初の本は JSL のすべての関数とメッセージを完全に説明しているわけではありませんが、2 番目の本は完全なものであるはずです。 2 冊の本は相互に補完し、一緒に使用することを目的としています。
このメッセージはスクリプト インデックスでも取り上げられており、ヘルプへのリンクも付いています。 「式」を検索すると、「式の実行」および「式の再実行」メッセージを含むリストが返されます。
Re: 列の数式が遅い: 計算が完了するまで待つ方法「再放送」も知りませんでした。 必要かどうかに関係なく、数式が再評価されるようです。 数式で乱数を使用すると、違いがわかります。 ほとんどの場合、<Re: 列の数式が遅い: 計算が完了するまで待つ方法いいですね、これも使えます。 再実行式は JMP V13 スクリプト ガイドに含まれていませんが、実行式は含まれています。 この場合はどちらも機能します。Re: 列の数式が遅い: 計算が完了するまで待つ方法素晴らしい! できます!Re: 列の数式が遅い: 計算が完了するまで待つ方法
以下は、うまくいくはずの簡単な変更です。まず、If() 句を削除することで処理が高速化され、次に、
dt << 式を再実行します。
続行する前に、JMP が数式の処理を強制的に完了します。
dt = Current Data Table();
dt << New Column( "_Target",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( (:LSL + :USL) / 2 )
);
dt << rerun formulas;
Re: 列の数式が遅い: 計算が完了するまで待つ方法テーブルに「式を実行」メッセージを送信してみてください。
dt << runFormulas;