如何防止“以适合模型运行”生成报告?我正在编写执行以下操作的脚本:
- 打开“拟合模型”窗口,
- 允许用户使用“拟合模型”窗口中的宏和其他功能填充它,
- 允许用户单击“运行”,此时将执行可能耗时的计算并生成报告。
单击“运行”时执行的计算由“运行”按钮中存储的脚本产生。该脚本会生成一个报告,这就是用户应该看到。但是,由于脚本已添加到“运行”按钮中,因此会显示所需的报告,但随后是运行自行生成的“最小二乘”报告。“最小二乘法”报告对用户毫无意义。
下面的脚本说明了该问题。 在该脚本中,“运行”按钮中的表达式“ runExpr”仅创建了一个克隆数据表。这是为了简化说明。在实际脚本中,该表达式(runExpr)根据在“拟合模型”窗口中输入的效果执行大量分析。 同样,在实际脚本中,用户以交互方式填充“拟合模型”窗口;为了方便起见,我在下面的脚本中填充了“拟合模型”窗口。
Names Default To Here( 1 );
runExpr = Expr(
// Creates a clone data table for illustration;
dt << Subset( Output Table( "Clone Table" ), All rows );
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fmSLS = Fit Model(
Y( :weight ),
Effects( :age, :height, :age * :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
);
r = fmSLS << Report;
r[Button Box( 9 )] << Set Script( runExpr);
当您按用户的方式单击“运行”时,将显示克隆表,但顶部的窗口是由“运行”命令生成的“最小二乘法”报告。我想阻止该报告的出现。
为此:
- 我试过在runExpr中使用Throw()和Stop(),但无济于事。
- 我考虑使用模式窗口,但是我需要“拟合模型”窗口中的“宏”功能,但看不到如何提供模式窗口帮助。
- 我什至想解决最小二乘报告的唯一方法就是在脚本中添加一个定时循环,如下所示。 但这充满了危险。无法知道runExpr需要多长时间才能完成,并且如果用户决定不单击“运行”,脚本将一直运行直到超时。
任何想法或帮助将不胜感激!
Names Default To Here( 1 );
runExpr = Expr(
// Creates a clone data table for illustration;
dt << Subset( Output Table( "Clone Table" ), All rows );
fm_Flag = 1
);
fm_Flag = 0; // Sets flag for timing
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fmSLS = Fit Model(
Y( :weight ),
Effects( :age, :height, :age * :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
);
r = fmSLS << Report;
r[Button Box( 9 )] << Set Script( runExpr; fm_Flag = 1 );
For( i = 1, i <= 100, i++,
If(fm_Flag < 1, Wait(0.5), windowsopen = Get Window List(); windowsopen[nItems(windowsopen)] << Close Window; Stop() )
);
脚本编写回复:如何防止“以适合模型运行”生成报告?我看不到如何修改附加到“运行”按钮框中的脚本,但是之后可以找到并关闭窗口。 参见下图:
fm = Current data Table() << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" )
);
fls = fm << Run;
window = Get Window List();
For( w = 1, w <= N Items( window ), w++,
If( Contains( window[w] << Get Window Title, "Fit Least Squares" ),
window[w] << Close Window;
Break();
);
);
回复:如何防止“以适合模型运行”生成报告?马克,谢谢你,但我认为这不适合我的情况。用户需要填充“拟合模型”窗口。如果将窗口组件添加到脚本中,它将在用户填充“拟合模型”窗口之前运行。因此,当用户单击“运行”时,脚本的该部分已“消失”。请查看我帖子中的第二个脚本,以按照建议的方式查看我非常精巧的解决方法。必须考虑用户填充Fit Model所花费的时间,然后考虑“运行”按钮中运行脚本所花费的时间。
回复:如何防止“以适合模型运行”生成报告?你是对的。 我试图修改我的插图,但是在创建“最小二乘”报告之前先评估按钮框上附加的脚本,因此该脚本无效。
Names Default to Here( 1 );
run expr = Expr(
// desired report
personality = Report( fm )[ComboBox(1)] << Get Selected;
Show( personality );
// undesired report
window = Get Window List();
For( w = 1, w <= N Items( window ), w++,
If( Contains( window[w] << Get Window Title, "Fit Least Squares" ),
window[w] << Close Window;
Break();
);
);
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fm = dt << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
Report( fm )[ButtonBox(9)] << Set Script( run expr );
// nothing after this point
回复:如何防止“以适合模型运行”生成报告?正确,似乎在执行“运行”按钮的内置行为之前,已运行了按钮框中的脚本。
这个小问题令人烦恼! 必须有一种方法可以推迟执行脚本,直到发生某项操作(如按下“运行”按钮)为止。 或者,为了防止执行内置行为(但正如我所说,将Throw和Stop放置在runExpr中不起作用)。
马克,感谢您的帮助。回复:如何防止“以适合模型运行”生成报告?您需要多少“模型规格”对话框? 我忍不住想,您可以用一个满足您确切需求的新窗口来代替该步骤。这篇文章中的示例可能会有所帮助:
https://community.jmp.com/t5/JMPer-Cable/Prompting-for-columns-totally-modally/ba-p/189647
如果要使用“模型规范”窗口,则可以为用户提供一个新按钮以单击:
Names Default to Here( 1 );
run expr = Expr(
// desired report
personality = Report( fm )[ComboBox(1)] << Get Selected;
Show( personality );
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fm = dt << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
// Show error if user clicks the wrong button
(fm << XPath("//ButtonBox[@title='Run']"))[1] << Set Script( New Window( "Use other bottom",
Text Box("Woops...\!n\!nPlease use the button at the bottom of the fit model dialog to launch this script.")));
// Button the user should click on
(fm << XPath("//OutlineBox"))[1] << Append(Button Box("Launch custom script", run expr; fm << Close Window;));<BR />
回复:如何防止“以适合模型运行”生成报告?如果不想使用最小二乘拟合平台,为什么要使用“拟合模型”对话框? 可能会有另一种方式来实现您想要的。