大家好,
我正在尝试编写一些 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