使用 JSL 构建大量图形时,JMP 会逐渐停止我正在编写一个脚本,它可以创建许多图表,确定每个图表的回归拟合度,然后将所有回归系数保存到一个表中。该脚本可以执行我想要的操作,但随着需要计算的列数增加,它会突然停止运行。即使我尝试在循环中关闭它们,该脚本似乎仍会在后台保留在 For 循环中创建的图表和生成的面板(一旦将图表发送到期刊(用于 PDF 导出)并提取了回归系数,我就不需要单独的图表或表格框数据了)。
当我使用调试器单步执行脚本时,脚本运行到最后并没有显示单独的窗口,但当我停止调试器(红色方块)时,for 循环中的所有单独窗口都会被创建。脚本迭代了 600 列,在后台创建的相应数量的窗口(设置为不可见)会随着时间的推移导致 jmp 函数逐渐停止。
当使用脚本遍历数据集以执行某些分析或生成许多图表时,如何最好地关闭创建的“中间”窗口、图表等,以最大限度地减少产生的内存负担?
下面是我遍历各列的脚本的部分片段。
For( i = 7, i <=ncols, i++,
biv = dt << Bivariate(
Y(Column(colList[i]) ),
X( :Temperature ),
Fit Line( {Line Color( "Medium Dark Red" )} ), invisible);
rbiv = biv << Report;
biv << Close;
rbiv[Frame Box( 1 )] << Frame Size( 550, 400 );
rbiv << Page Break;
rbiv << Journal;
dtx= Report( biv )["Parameter Estimates"][Table Box( 1 )] << make combined data table;
// dty= Report( biv )["Lack Of Fit"][Table Box( 1 )] << make combined data table;
dtSlope << Concatenate(dtx ,"Append to first table");
// dtFit << Concatenate(dty ,dtSlope, "Append to first table");
// Close(dty, NoSave);
Close(dtx, NoSave);
);
自动化和脚本回复:使用 JSL 构建大量图形时,JMP 速度会逐渐减慢直至停止我认为您需要将突出显示的行更改为:“rbiv << Close Window;”并将其向下移动到不再需要它的位置,例如箭头指向的位置。

“rbiv << Close Window;”表示要关闭报告窗口。

令我惊讶的是,“biv << Close Window;”也能正常工作。但我不会推荐这样做,至少因为这种行为没有记录在案。
回复:使用 JSL 构建大量图形时,JMP 速度会逐渐减慢直至停止除了确保这些窗口正确关闭之外,根据你的 JMP 版本,你可能还想在双变量消息中添加“Invisible”或“Private”,并制作组合数据表
Names Default To Here(1);
cols = {"height", "weight"};
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt_res = Empty();
For Each({colname}, cols,
// You can also use Private, it is generally faster but more dificult to debug and utilize
biv = dt << Bivariate(Y(Eval(colname)), X(:weight), Fit Line({Line Color({230, 159, 0})}), Invisible);
// this can also be made invisible/private
dt_biv = Report(biv)["Parameter Estimates"][Table Box(1)] << make combined data table(Invisible);
biv << close window;
dt_biv << Delete Scripts(dt_biv << Get Table Script Names);
// wait(0); // wait(0) isn't usually not necessary
If(Is Empty(dt_res),
dt_res = dt_biv;
dt_res << Set Name("Biv Parameter Estimates");
,
dt_res << Concatenate(
dt_biv,
"Append To First Table"
);
Close(dt_biv, no save);
);
);
dt_res << show window; // use result
回复:使用 JSL 构建大量图形时,JMP 速度会逐渐减慢直至停止谢谢。这两个解决方案/建议都有帮助,但原因不同。
是的,错误似乎是我错误地使用了biv << Close命令,而不是biv << Close Window 命令。Close命令没有生成任何错误,也没有显示任何内容(因此导致了我的问题)。这可能是 JSL中令人沮丧的问题之一。在许多情况下,不正确或不合适的命令或参数不会生成错误,只是默默地不执行任何操作。这使得很难排除故障,不知道问题出在脚本本身还是命令使用不当。
一旦我更改为正确的关闭命令,脚本中的错误位置就变得明显,因为它会产生错误,因为我仍然需要它来获取参数估计。
真的很感谢你的帮助....
回复:使用 JSL 构建大量图形时,JMP 速度会逐渐减慢直至停止您需要完整的双变量拟合报告吗?还是您只需要参数估计值(斜率和截距,以及相关的标准误差和t比)?如果是后者,您是否尝试过使用“拟合曲线”而不是“以X拟合Y”?根据我的经验,“拟合曲线”速度更快,并且更容易处理大量曲线。