大家好,
我正在嘗試編寫一些 JSL 代碼,從數據表中獲取數據並以圖形方式顯示它供用戶選擇以進行進一步分析。 我想得到的是來自 PCA 平台的特徵值報告和來自擬合模型平台的效果摘要報告之間的混合。 我希望視覺效果看起來像 PCA 報告,但是效果摘要報告的功能(即能夠選擇一行)。
PCA 特徵值報告(我希望它看起來如何):

擬合模型效果摘要報告(我想要的功能)。 在此平台中,您可以在 List Box() 中選擇一行並選擇“刪除”或“添加”。 我不想刪除或添加,但我確實希望用戶能夠選擇行(從上面的輸出中):

我附上了我正在使用的數據表,這是下面 JSL 代碼中的“當前數據表()”。 下面的 JSL 代碼可以幫助我解決問題,但不是我想要的。
Names Default To Here( 1 );
PC_dt = Current Data Table();
PC_n = {};
PC_eigv = {};
PC_per = {};
PC_cump = {};
For( i = 1, i <= N Rows( PC_dt ), i++,
Insert Into( PC_n, PC_dt:"Number"n[i] );
Insert Into( PC_eigv, Round( PC_dt:"Eigenvalue"n[i], 5 ) );
Insert Into( PC_per, Round( PC_dt:"Percent"n[i], 5 ) );
Insert Into( PC_cump, Round( PC_dt:"cumulative Percent"n[i], 5 ) );
);
PC_Rpt_win = New Window( "PC Results",
Outline Box( "Eigenvalues & cumulative Percent",
//List Box(
//List Box(
Table Box(
Number Col Box( "Number", Eval List( PC_n ) ),
Number Col Box( "Eigenvalue", Eval List( PC_eigv ), <<SET format=""></SET>
使用註釋掉的部分,我從代碼中得到以下輸出(不過,沒有行是可選的):

我真的不知道我是否需要代碼的整個前大綱框部分,在那裡我為 PC 和特徵值等生成列表。但是,這似乎是合乎邏輯的方法,因為我正在處理中的列數據表和函數需要列表。 它有效,即使沒有必要。
</CODE></P><P> </P><P>如果我在 Table Box() 周圍包含一個或兩個註釋掉的 List Box() 調用,我會得到以下結果。 行是可選擇的,但沒有顯示:</P><P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 400px;"><IMG src="https://us.v-cdn.net/6038925/uploads/images/37045iA319787974999980/DiedrichSchmidt_3-1635336043749.png" role="button" title="DiedrichSchmidt_3-1635336043749.png" alt="DiedrichSchmidt_3-1635336043749.png" /></SPAN></P><P>我不確定我做錯了什麼,腳本索引中關於如何正確使用 List Box() 調用和 Table Box() 的示例有限。 我嘗試遵循“擬合模型”平台報告窗口中的樹結構,但它不起作用。</P><P> </P><P>總之,我想更正我的腳本中的以下內容:</P><OL><LI>更正 Plot Col Box,使其具有 PC 報告所示的累積百分比曲線(上圖)。 這不像第 2 條那麼重要。</LI><LI>更正 Table Box() 周圍的 List Box() 調用,以便用戶可以在列錶框中選擇一行,然後將其發送到另一個函數進行進一步分析。</LI></OL><P>感謝您的任何建議和幫助!,</P><P>DS</P></LINGO-BODY><LINGO-LABS id="lingo-labs-430708" slang="en-US"><LINGO-LABEL>腳本編寫</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-430729" slang="en-US">回复:List Box() 中 Table Box() 的腳本幫助</LINGO-SUB><LINGO-BODY id="lingo-body-430729" slang="en-US"><P>List Box() 是否有特定需求? 您可以使用<CODE class=""><< 設置可選行();使行在表格框中可選擇,然後使用<< 設置行更改函數(Function({this}, );將功能添加到選擇中。
腳本索引示例:
Names Default To Here(1);
New Window("Mountains",
tb = Table Box(
String Col Box("Mountain", {"K2", "Delphi", "Kilimanjaro", "Grand Teton"}),
Number Col Box("Elevation (meters)", {8611, 681, 5895, 4199}),
Plot Col Box("", {8611, 681, 5895, 4199})
)
);
tb << Set Selectable Rows();
tb << set row change function(Function({this}, Print(this << get selected rows)));
你好@jthi ,
感謝您的快速反饋。 我之前嘗試過,但什麼也沒發生,所以我放棄了它,換了另一條路線,但它沒有通向任何地方。 我回去試了一下,成功了,謝謝! 添加的功能很有幫助。 這肯定解決了第 2 項,這是更重要的一項。 如果有任何想法如何修復第 1 項,那就太好了,但不是必需的。
這是相關的,但也許是另一個線程(讓我知道,我會將其重新發佈為另一個線程)。
你知道如何使用JSL將PCA平台的DModX和T²值保存到數據表中嗎? 所有這一切都是為了嘗試使這個過程自動化,或者至少去掉其他幾個步驟,只是為用戶提供決定 PC 數量的基礎知識,然後用於保存 DModX 和 T² 公式。
謝謝!,
DS
你好@jthi ,
好吧,忘記關於 DModX 的部分,腳本索引向我展示瞭如何做到這一點,它按預期工作。 它有一個 Save T Square 的例子,但這不起作用。 我會堅持下去的。 我想我需要參考正確的大綱框。
謝謝!,
DS
對於第 1 項:
我想還有其他/更好的方法可以做到這一點,但我發現 << Lower 和 << Upper(需要指定 Lower)消息。 使用 << Lower 您可以從 Cumulative Column 獲取第一個值,然後將它們設置為 Plot Col Box with Lower
pcb << Lower(ncb << get as matrix);

使用您的代碼,它看起來像這樣(添加引用並使用它們):
查看更多...Names Default To Here( 1 );
PC_dt = Current Data Table();
PC_n = {};
PC_eigv = {};
PC_per = {};
PC_cump = {};
For( i = 1, i <= N Rows( PC_dt ), i++,
Insert Into( PC_n, PC_dt:"Number"n[i] );
Insert Into( PC_eigv, Round( PC_dt:"Eigenvalue"n[i], 5 ) );
Insert Into( PC_per, Round( PC_dt:"Percent"n[i], 5 ) );
Insert Into( PC_cump, Round( PC_dt:"cumulative Percent"n[i], 5 ) );
);
PC_Rpt_win = New Window( "PC Results",
Outline Box( "Eigenvalues & cumulative Percent",
//List Box(
//List Box(
Table Box(
Number Col Box( "Number", Eval List( PC_n ) ),
Number Col Box( "Eigenvalue", Eval List( PC_eigv ), <<SET format=""></SET>獲取值:
有時使用 Make into 數據表可能就足夠了(取決於平台以及是否使用 By 變量):

然後從結果表中檢查表腳本:


有時,這提供了一種非常快速的方法來獲取對正確顯示框的引用。
你好@jthi ,
再次感謝您的快速反饋和幫助。 是的,<
現在,我唯一的問題是如何保存 T²。 每次我嘗試從 PCA 平台處理有問題的大綱框時,都會收到一條日誌錯誤,指出顯示框無法識別 <
謝謝!,
DS