こんにちはコミュニティ、
昨日、これに関連する質問をしたところ、素晴らしい回答が得られました。 ただし、ソリューションを実装しようとしたときに問題が発生しました。 数え切れないほどの時間を費やした後、私はさらに助けを求めています。
これがシナリオです。
次の列と行を持つデータ テーブル (添付) があります。

1.列「果物」から始まる各列を一度にループし、「場所」でロジスティックプロットをプロットし、出力をジャーナルに送信したいと思います。
2. JSL を使用したプロットに付随する要約統計を完全に削除したいと考えています。
問題なくステップ 1 を実行できます。 以下は私のコードです:
dt=open("$\fruit_drink.jmp");
colList = dt << Get Column Names();
For( i = 3, i <= Nitems( colList ), i++,
obj = Logistic(
Y( colList[i] ),
X( :Day ),
By( :location),
SendToReport(
Dispatch( {}, "1", ScaleBox, {Min( 35.2151394422311 )} ),
Dispatch(
{},
"FitNom Plot",
FrameBox,
{Marker Size( 4 ), Row Legend(
colList[i],
Color( 1 ),
Color Theme( "JMP Default" ),
Marker( 1 ),
Marker Theme( "Standard" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
)
)
);
obj << journal;
);私はこの出力を取得します (要約統計を含むグラフが他にもありますが、ここにすべてを収めることはできません):

統計を削除するために、次の解決策を実装しようとしました (JMP コミュニティから受け取った以前のヘルプに基づいています)。
dt=open("$\fruit_drink.jmp");
colList = dt << Get Column Names();
For( i = 3, i <= Nitems( colList ), i++,
obj = Logistic(
Y( colList[i] ),
X( :Day ),
By( :location),
SendToReport(
Dispatch( {}, "1", ScaleBox, {Min( 35.2151394422311 )} ),
Dispatch(
{},
"FitNom Plot",
FrameBox,
{Marker Size( 4 ), Row Legend(
colList[i],
Color( 1 ),
Color Theme( "JMP Default" ),
Marker( 1 ),
Marker Theme( "Standard" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
)
)
);
obj << journal;
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>このスクリプトを実行すると、無限ループが発生し、JMP を終了する必要がありました。 内側の for ループを外側に配置すると、何も起こらず、要約統計が削除されません。
誰かが私を助けることができますか?
ありがとう。
簡単な解決策。スクリプトの 2 番目の For() ループは 1 番目の For() ループ内にあり、どちらもインデックス変数として「i」を使用していました。そのため、2 番目のループは、i の値を外側 (最初の) ループの停止値よりも小さい値に継続的に設定していました。
これが簡単な修正です
Names Default To Here( 1 );
dt = data table( "fruit_drink" );
colList = dt << Get Column Names();
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>
こんにちは。
添付は私のデータテーブルです。 それがあなたにとってうまくいくのは奇妙です。
ありがとう。
私が提出したコードのテストでは、それは行われませんでした。データテーブルを投稿できますか。問題はデータの問題だと思います。データ テーブルのコピーがあれば、さらに詳しく調べることができます。
こんにちは。
私を助けてくれてありがとう。 あなたのソリューションは私が望むものに近いようです。 唯一の問題は、スクリプトの実行時に JMP が無限ループに入ることです。 セッションを強制終了せずに、チャートをジャーナルに追加し続けます。
ありがとう。
コードにいくつかの問題があります
- コードの最初の行として実際に追加する必要があります
Names Default To Here( 1 );
このスクリプトの変数が他のスクリプトの同じ名前の変数に干渉しないようにします
- 作成前または削除後にオブジェクトと変数を使用しようとしています
obj << journal;
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>
上記のケースは、ジャーナルを作成する前に、何かをジャーナルに送信しようとする例です。obj << close window;
For( i = 1, i <= N Items( obj ), i++,
jrn["Iterations"] << delete;
jrn["Whole Model Test"] << delete;
jrn["Parameter Estimates"] << delete;);
);
この場合、削除したばかりのオブジェクトを参照しています
- 場合によっては、Iterations テーブルがなく、コードがエラーになることがわかったので、いくつかのステートメントの周りに Try() 関数を追加しました。
For( i = 1, i <= N Items( obj ), i++,
Try( jrn["Iterations"] << delete );
Try( jrn["Whole Model Test"] << delete );
Try( jrn["Parameter Estimates"] << delete );
);
Try( obj << close window );
Try() 関数は、ステートメントを実行するために「試行」するだけですが、それができない場合は続行します。
- また、コードをジャーナルに追加する 2 番目の方法を試みたようです。
obj << journal;
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>
必須ではないと思いますが、ジャーナルが作成される前にジャーナルにアップロードしようとするという問題があるためです。
したがって、ここにコードのリワークがあります。
Names Default To Here( 1 );
dt = Open( "$\fruit_drink.jmp" );
colList = dt << Get Column Names();
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>