JSL を使用して多数のグラフを作成すると、JMP が遅くなり停止します多数のグラフを作成し、各グラフの回帰近似値を決定し、すべての回帰係数をテーブルに保存するスクリプトを作成しています。スクリプトは必要なアクションを実行してくれるのですが、評価する列数が増えると突然停止してしまいます。スクリプトは、Forループ内で作成されたプロットと生成されたパネルを、ループ内で閉じようとしてもバックグラウンドで保持しているようです(プロットをジャーナル(PDFエクスポート用)に送信し、回帰係数を抽出した後は、個々のグラフや表のボックスデータは不要です)。
デバッガを使ってスクリプトをステップ実行すると、スクリプトは最後まで実行され、個々のウィンドウは表示されません。しかし、デバッガを停止すると(赤い四角)、forループ内の個々のウィンドウがすべて作成されます。スクリプトは600列以上を反復処理し、それに対応する数のウィンドウがバックグラウンドで作成され(非表示に設定)、時間の経過とともにjmpが停止してしまいます。
スクリプトを使用してデータセットを反復処理し、分析を実行したり、多くのグラフを生成したりする場合、生成される「中間」ウィンドウやプロットなどを閉じて、生成されるメモリの負荷を最小限に抑える最適な方法は何ですか?
以下は、列を反復処理するスクリプトの一部です。
For( i = 7, i <=ncols, i++,
biv = dt << Bivariate(
Y(Column(colList[i]) ),
X( :Temperature ),
Fit Line( {Line Color( "Medium Dark Red" )} ), invisible);
rbiv = biv << Report;
biv << Close;
rbiv[Frame Box( 1 )] << Frame Size( 550, 400 );
rbiv << Page Break;
rbiv << Journal;
dtx= Report( biv )["Parameter Estimates"][Table Box( 1 )] << make combined data table;
// dty= Report( biv )["Lack Of Fit"][Table Box( 1 )] << make combined data table;
dtSlope << Concatenate(dtx ,"Append to first table");
// dtFit << Concatenate(dty ,dtSlope, "Append to first table");
// Close(dty, NoSave);
Close(dtx, NoSave);
);
自動化とスクリプトRe: JSL を使用して多数のグラフを作成すると JMP が遅くなり停止します強調表示された行を「rbiv << Close Window;」に変更する必要があると思います。また、矢印が指している場所など、不要になった場所まで移動します。

「rbiv << Close Window;」はレポート ウィンドウを閉じることを意味します。

「biv << Close Window;」も動作するとは驚きました。しかし、少なくとも動作が文書化されていないため、お勧めしません。
Re: JSL を使用して多数のグラフを作成すると JMP が遅くなり停止しますこれらのウィンドウが適切に閉じられていることを確認する以外に、JMPのバージョンに応じて、二変量メッセージにInvisibleまたはPrivateを追加し、結合されたデータテーブルを作成することもできます。
Names Default To Here(1);
cols = {"height", "weight"};
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt_res = Empty();
For Each({colname}, cols,
// You can also use Private, it is generally faster but more dificult to debug and utilize
biv = dt << Bivariate(Y(Eval(colname)), X(:weight), Fit Line({Line Color({230, 159, 0})}), Invisible);
// this can also be made invisible/private
dt_biv = Report(biv)["Parameter Estimates"][Table Box(1)] << make combined data table(Invisible);
biv << close window;
dt_biv << Delete Scripts(dt_biv << Get Table Script Names);
// wait(0); // wait(0) isn't usually not necessary
If(Is Empty(dt_res),
dt_res = dt_biv;
dt_res << Set Name("Biv Parameter Estimates");
,
dt_res << Concatenate(
dt_biv,
"Append To First Table"
);
Close(dt_biv, no save);
);
);
dt_res << show window; // use result
Re: JSL を使用して多数のグラフを作成すると JMP が遅くなり停止しますありがとうございます。どちらの解決策/推奨事項も役立ちましたが、理由はそれぞれ異なっていました。
はい、エラーはコマンドbiv << Closeを誤って使用し、 biv << Close Window を使用しなかったことによるようです。Closeコマンドはエラーを生成せず、何も表示されませんでした(これが私の問題です)。これはJSLの厄介な問題の一つです。コマンドや引数が正しくない、あるいは適切でない場合でも、多くの場合エラーは生成されず、何も起こりません。そのため、問題がスクリプト自体にあるのか、コマンドの誤った使用にあるのかをトラブルシューティングするのが困難になります。
正しい Close コマンドに変更すると、パラメーター推定値を取得するためにまだ必要であったため、スクリプト内の間違った場所がエラーを生成して明らかになりました。
本当に助かります。
Re: JSL を使用して多数のグラフを作成すると JMP が遅くなり停止します完全な二変量フィットレポートが必要ですか?それとも、パラメータ推定値(傾きと切片、関連する標準誤差とt比)のみが必要ですか?後者の場合、「Fit Y by X」ではなく「Fit Curve」を使用してみてはいかがでしょうか?私の経験では、「Fit Curve」の方が高速で、多数の曲線を簡単に処理できます。