大家好,
我遇到了一些困难,即在一个 Expr1() 中正常评估的变量在调用第一个 Expr 的另一个 Expr2() 中无法正确评估。 我有一些代码,其中定义了一个 Expr1() 来生成感兴趣的列的分布。 稍后我还有另一个表达式 Expr2() 会回调 Expr1()。 Expr1() 中的某些变量在 Expr2() 中似乎无法正确计算。
对于视觉效果,Expr2() 生成一个如下所示的窗口:

第一个表达式 Expr1() 是在图形生成器下面生成包含的分发平台的表达式。 分布下方的组合框和按钮框允许用户在不同的拟合统计数据之间切换,例如不同的 R^2、RMSE、平均 Abs Dev、-Logliklihood 等。我的目的是相应地更新 GB 和分布。 GB 会适当更新,但发行版不会。 例如,将拟合统计量更改为 RMSE 时,结果如下:

它确实更新了分布图,但它使用它们的默认大小设置,而不是我在 Expr1() 中建立的大小设置。它应该看起来像这样,其中分布图的大小与第一张图片中的大小相同:

Expr1() 中生成分布的代码部分如下:
//this part gets column names to insert into Dispatch() below<BR />sfitcol1 = Column( NNYCol + NNcolshift ) << Get Name;
sfitcol2 = Column( NNYCol + 1 + NNcolshift ) << Get Name;
sfitcol3 = Column( NNYCol + 2 + NNcolshift ) << Get Name;<BR /><BR />//in this example, the results are:<BR />//"RMSE Training"<BR />//"RMSE Validation"<BR />//"RMSE Test"
<BR />//this part generates the Distributions that will be used to change my output report in Expr2()
dt_results << Distribution(
Continuous Distribution( Column( Eval( NNYCol + NNcolshift ) ), Quantiles( 0 ) ),
Continuous Distribution( Column( Eval( NNYCol + 1 + NNcolshift ) ), Quantiles( 0 ) ),
Continuous Distribution( Column( Eval( NNYCol + 2 + NNcolshift ) ), Quantiles( 0 ) ),
SendToReport(
Dispatch( {sfitcol1}, "Distrib Histogram", FrameBox, {Frame Size( 60, 100 )} ),
Dispatch( {sfitcol1}, "Distrib Outlier Box", FrameBox, {Frame Size( 30, 100 )} ),
Dispatch( {sfitcol2}, "Distrib Histogram", FrameBox, {Frame Size( 60, 100 )} ),
Dispatch( {sfitcol2}, "Distrib Outlier Box", FrameBox, {Frame Size( 30, 100 )} ),
Dispatch( {sfitcol3}, "Distrib Histogram", FrameBox, {Frame Size( 60, 100 )} ),
Dispatch( {sfitcol3}, "Distrib Outlier Box", FrameBox, {Frame Size( 30, 100 )} )
)
);如果我自己运行 Expr1() ,它工作得很好,问题是当 Expr2() 调用 Expr1() 时它失败,因为它没有评估 Dispatch 中的变量 sfitcol# ,所以它没有改变 FrameBox 大小正如代码中应该的那样。
Expr2() 中交换分布的代码部分(仅使用组合框)如下:
NNycb = Combo Box(
NNylist,
<<SET></SET>
将 Expr1() 的部分放入组合框函数中,然后尝试运行 sfitcol 变量,然后发送到报告以修改框架框,会在嵌入式日志中出现以下错误:
在大纲上下文 {sfitcol1} 中找不到项目“sfitcol1”
在大纲上下文 {sfitcol1} 中找不到项目“sfitcol1”
在大纲上下文 {sfitcol2} 中找不到项目“sfitcol2”
在大纲上下文 {sfitcol2} 中找不到项目“sfitcol2”
在大纲上下文 {sfitcol3} 中找不到项目“sfitcol3”
在大纲上下文 {sfitcol3} 中找不到项目“sfitcol3”
如果我然后手动输入列名称,例如第一个 Dispatch: Send to Report(Dispatch({"RMSE Training"}, "Distrib Histogram", Framebox, Frame Size{(60,100)}),那么它将更改相应的框架框。

因此,这是可能的,并且应该完成我在 Expr1() 中定义事物的方式,但是在 Expr2() 中执行事物时传递变量而不是变量的值(文本)。 希望得到一些关于如何纠正这个问题的建议。 我认为我不需要使用 Eval(Substitute(Expr())) 类型的解决方案,但也许我需要。
非常感谢任何想法/想法/建议。
谢谢!,
DS