JSL:帮助解决新脚本命令的奇怪行为各位脚本编写者们好,
(W11,64 位,JMP Pro 18.1.1)
我正在运行的一个脚本出现了一些奇怪的行为。该脚本执行多项操作,其中一项操作是创建一些新脚本并添加到数据表中。我必须将一些变量传递给新脚本,并让它在原始 JSL 之外的数据表中运行。我正在向数据表添加两个新脚本。一个用于使用 Graph Builder 进行数据可视化(它运行良好),另一个用于使用 Distribution 平台进行数据可视化。
下面是添加 Graph Builder 脚本的 JSL(它运行良好,完全符合我的要求):
Eval(
Eval Expr(
DOETable << New Script(
"Visualize Graphic Results",
Current Data Table()<
<GRAPH builder=""></GRAPH>
<P>类似地,这是分布可视化的脚本,它不能按预期工作:</P> <CODE class=" language-jsl">Eval(
Eval Expr(
DOETable << New Script(
"Visualize Distribution Results",
Current Data Table()<
<DISTRIBUTION></DISTRIBUTION> <P>当我运行父脚本时,添加了两个新的表脚本(再次,GB 脚本运行良好),但是当我尝试从数据表(绿色三角形)运行分发脚本时,它没有显示结果,而是打开了分发平台窗口。</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SDF1_0-1749735408022.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="SDF1_0-1749735408022.png" style="width: 200px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="SDF1_0-1749735408022.png" style="width: 200px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="SDF1_0-1749735408022.png" style="width: 200px;"><span class="lia-inline-image-display-wrapper" image-alt="SDF1_0-1749735408022.png" style="width: 200px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76843i57FDB333BC7A2A58/SDF1_0-1749735408022.png" role="button" title="SDF1_0-1749735408022.png" alt="SDF1_0-1749735408022.png" /></span></SPAN></SPAN></SPAN></SPAN></P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SDF1_2-1749735475257.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="SDF1_2-1749735475257.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="SDF1_2-1749735475257.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="SDF1_2-1749735475257.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="SDF1_2-1749735475257.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76845i1E9571AFD2ACBFEF/SDF1_2-1749735475257.png" role="button" title="SDF1_2-1749735475257.png" alt="SDF1_2-1749735475257.png" /></span></SPAN></SPAN></SPAN></SPAN></P> <P>注意:为了保护无辜者,名字已被删除;-)。</P> <BR /> <P>首先,它不应该这样做,它实际上应该按照新脚本中的规定调出所有分布(当我在父 JSL 中逐步运行脚本时,它可以工作)。</P> <BR /> <P>这是非常奇怪的部分。如果我在数据表(编辑脚本)中打开新脚本,然后单击“运行”,它就能按预期运行。</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SDF1_3-1749735688131.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="SDF1_3-1749735688131.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="SDF1_3-1749735688131.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="SDF1_3-1749735688131.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="SDF1_3-1749735688131.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76846iA545DE7F81730152/SDF1_3-1749735688131.png" role="button" title="SDF1_3-1749735688131.png" alt="SDF1_3-1749735688131.png" /></span></SPAN></SPAN></SPAN></SPAN><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SDF1_4-1749736010450.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="SDF1_4-1749736010450.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="SDF1_4-1749736010450.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="SDF1_4-1749736010450.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="SDF1_4-1749736010450.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76847i5746AC9063CF5B38/SDF1_4-1749736010450.png" role="button" title="SDF1_4-1749736010450.png" alt="SDF1_4-1749736010450.png" /></span></SPAN></SPAN></SPAN></SPAN></P> <BR /> <P>我不知道自己哪里做错了——JSL 可以正常工作,但不知何故,当我尝试从绿色三角形运行它时,它却无法工作,这对我来说很不合理。我是不是漏掉了什么,或者调用/命令出错了?其他人遇到过这种奇怪的行为吗?如果遇到过,你是怎么解决的?</P> <BR /> <P>非常感谢您的帮助,谢谢!</P> <BR /> <P>DS</P> <BR /> <BR /> <BR />
<CODE class=" language-jsl">
<LINGO-LABS id="lingo-labs-879578" slang="en-US" mode="CREATE">
<LINGO-LABEL>自动化和脚本</LINGO-LABEL>
<LINGO-LABEL>数据探索与可视化</LINGO-LABEL>
</LINGO-LABS>
回复:JSL:帮助解决新脚本命令的奇怪行为我的第一个猜测是 Column() 的用法。
分发平台将参数“列”命名为糟糕的名称。请注意此处如何输入列
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
obj = dt << Distribution(Column(:Age, :Weight));
与图形生成器相比
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
查看更多...
Column() 不用于图形生成器,它使用 X()、Y() 等
回复:JSL:帮助解决新脚本命令的奇怪行为我想你可能是对的。evalexpr 会尝试将平台的列语法转换为列。它可能会这样工作:
Expr( Column( DOETable, N Items( ListNames ) ) )
//becomes (untested...)
Column( Expr(DOETable), expr( N Items (ListNames ) ) )
每个平台的语法通常使用类似函数的结构进行分组,当平台使用的名称与函数名称相同时,很容易造成混淆。您仍然需要重新排列,因为 expr 需要是可以插入到表达式中的常量。
回复:JSL:帮助解决新脚本命令的奇怪行为你好@Craige_Hales和@jthi ,
实际上,问题有点复杂。首先,Column() 调用不应该在 Expr() 调用中。其次,需要使用 Distribution 平台对列的正确引用,但由于我将其保存为父 JSL 中的数据表脚本,因此不能直接将该列引用为 :"name"n,我必须在 Eval Insert() 中构建它,并在 Expr() 调用中对其进行 Parse()。
最终分发平台的工作如下:
Eval(
Eval Expr(
Distribution(
Continuous Distribution( Column( Expr( Parse( Eval Insert( ":\!"^ListNames[Nitems(YCols)+1]^\!"" || "n" ) ) ) ) ),
Process Capability( 0 )
)
)
);
这为 Distribution 平台构建了正确的列名引用,并允许将可执行脚本保存到数据表中。在我看来,这有点繁琐,但它确实有效,这才是最重要的。
感谢您的建议!
DS