你好社區,
我昨天問了一個與此相關的問題並得到了很好的答案。 然而,我在嘗試實施該解決方案時遇到了問題。 在花了無數時間之後,我請求更多幫助。
這是場景。
我有一個資料表(附後),其中包含以下列和行:

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 迴圈放在外部時,沒有任何反應,摘要統計資料不會被刪除。
有人能幫我嗎?
謝謝。
簡單的解決方案。腳本中的第二個 For() 迴圈位於第一個 For() 迴圈內,它們都使用「i」作為索引變數。因此,第二個循環不斷地將 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() 函數執行它所說的操作,它只是「嘗試」執行該語句,但如果它不能執行該操作,它就會繼續執行。
- 您似乎也嘗試了第二種將程式碼新增至日誌的方法。
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>