将 JSL 作为加载项与脚本运行时出现奇怪的错误。大家好,
我有一个我写的脚本,我把它变成了一个加载项。上次我使用它时,大约是 2023 年 11 月,一切运行良好。我再次运行它,当我将它作为加载项运行时,我遇到了一个非常奇怪的错误/错误,但它没有当我单独运行 JSL 文件时不会发生这种情况。
因此,该脚本运行一些建模并生成一个输出窗口,该窗口应该以图形方式和表格的形式显示每次调整运行的结果。输出应该如下所示(这是从脚本本身运行的):

输出窗口是从数据表生成的,该数据表从建模平台收集所有拟合统计数据。

再说一遍,该脚本运行良好,并且完成了它应该做的一切。然后,当我将其作为 jmpaddin 文件并将其安装在 JMP 中时,会发生一些情况,代码会变得混乱,它不会引用输出表,而是返回到包含我正在使用的 Y 和 X 的原始数据表用于建模。因此,输出窗口的图形生成器部分为空白,并且我从 JMP 收到错误::Tune Run 列不存在(原始数据表中不存在,但输出数据表中存在) )。
这是同类建模的输出,但将其作为加载项而不是 JSL 运行——没有图形生成器:

而且,当转到 JMP 主窗口中的窗口列表时,您可以看到,对于我将其作为插件运行的实例,它从原始数据表 T20-XL 生成了 Bootstrap Forest Results 窗口。因此,该数据表中自然不存在 :Tune Run 列。但是,当我将其作为直接 JSL 运行时,它会按预期从摘要输出数据表正确生成输出窗口(Bootstrap Forest Results 2)。

这是我得到的错误:

日志报告显示以下内容:


我无法弄清楚出了什么问题以及为什么加载项版本试图使用原始数据表而不是它应该使用的摘要输出数据表。我也不明白为什么它可以直接从 JSL 文件运行它,但作为一个加载项它根本无法正常工作。
还有其他人遇到过这个问题吗?如果是这样,您是如何纠正它的,您是否能够弄清楚它最初是如何发生的?
谢谢!,
DS
自动化和脚本编写数据探索和可视化预测建模和机器学习视窗回复:将 JSL 作为加载项与脚本运行时出现奇怪的错误。您可以将图形生成器消息发送到特定的数据表吗?
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
dt << 图形生成器(...
回复:运行时 JSL 作为插件而不是脚本出现奇怪的错误。嗨@jthi ,
是的,我可以,但我认为问题是不同的东西——内存分配和赋值的东西。
我之所以这么想,是因为我在机器上运行了两个 JMP Pro 实例。所以我有两个 JMP 主窗口——一个是原始窗口,另一个是主窗口名称中添加了 [2] 的窗口。当我尝试在第二个 JMP 实例中运行插件时,我得到了错误,但在第一个 JMP 实例中运行它时没有出现错误。我认为在运行第二个 JMP 实例时存在一个错误,无法正确处理问题。
以前不会这样。我经常运行两个 JMP 实例,一个在后台处理数据,另一个用于处理人们给我的新数据。我尝试在第二个实例中运行建模,这样如果我双击 jmp 文件,它将在第一个 JMP 实例中打开,并允许我处理它,而建模则在另一个实例的后台运行。我认为 JMP 的最新更新中可能发生了某些事情,因为它以前从未出现过这个问题。
谢谢!,
DS
回复:运行时 JSL 作为插件而不是脚本出现奇怪的错误。您如何构建您的插件?也许强制使用命名空间会使其作为插件失败(但不确定为什么它不会早点发生)?

回复:运行 JSL 作为插件而不是脚本时出现奇怪的错误。你好@jthi ,
我按照常规方式构建插件:创建一个 .def 文件,安装它,然后根据需要更改工具栏。我像往常一样运行插件。我尝试通过取消选中或选中复选框来更改“Here”命名空间,但似乎无法解决问题。
再次检查后,我现在无法在单个 JMP 实例中运行该插件。我总是收到同样的错误。也许这就是@Craige_Hales所说的,但如果是这样,我不确定如何解决这个问题,或者为什么某些东西突然发生了变化,导致插件出现故障。如前所述,JSL 运行正常。
谢谢!,
DS
回复:运行 JSL 作为插件而不是脚本时出现奇怪的错误。另请参阅Bug 或 Feature?? ;听起来您遇到的插件的 eval 上下文可能与稍后使用的上下文不同……但根据您的描述,我并不确定。JMP 的当前数据表在 eval 上下文中是已知的。通常,脚本使用一个 eval 上下文,它属于 JSL 窗口或平台窗口。插件脚本运行时不需要任何上下文,因此提供了一个瞬时 eval 上下文。当插件脚本结束时(很可能运行到最后),瞬时 eval 上下文就会消失。如果它打开了一个窗口,并且该窗口中的按钮运行更多脚本,它们将使用该窗口的 eval 上下文,而该脚本不知道前一个脚本。
回复:以插件形式运行 JSL 而非脚本时出现奇怪的错误。嗨@Craige_Hales ,
我猜问题肯定出在你描述的情况上。我的代码生成的最终结果窗口确实有一些按钮可以执行一些操作,比如重新运行模型拟合或重新启动代码。而且,既然 JSL 文件运行流畅,但插件却不行,那问题肯定出在你提到的评估过程上。
我不明白的是,为什么它之前运行正常,现在却出现了问题?此外,我也不知道该如何解决这个问题,因为我根本不知道问题最初是如何产生的。正如前面提到的,它在2023年10月左右还运行良好。
我的代码基本上就是一堆根据用户交互调用和执行的Expr()函数。如果你想看看能不能重现这个错误,我可以分享一下代码。
会不会是 JMP 的某个设置更改导致了这个问题?如果能找到解决方法就太好了,因为我更喜欢把它作为插件运行,而不是通过 JSL 运行。
谢谢!,
DS