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;"><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></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;"><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></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;"><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><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;"><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></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