JSL: 새 스크립트 명령의 이상한 동작에 대한 도움말안녕하세요 스크립터 여러분,
(W11, 64비트, JMP Pro 18.1.1)
실행 중인 스크립트에서 이상한 동작이 발생합니다. 스크립트는 여러 가지 작업을 수행하지만, 그 중 하나는 데이터 테이블에 추가할 새 스크립트를 만드는 것입니다. 새 스크립트에 몇 가지 변수를 전달하고 원래 JSL 외부의 데이터 테이블에서 실행해야 합니다. 데이터 테이블에 두 개의 새 스크립트를 추가하고 있습니다. 하나는 Graph Builder를 사용하여 데이터를 시각화하는 스크립트이고(잘 작동합니다), 다른 하나는 Distribution 플랫폼을 사용하여 데이터를 시각화하는 스크립트입니다.
그래프 빌더 스크립트를 추가하는 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 스크립트는 다시 한번 잘 작동합니다). 하지만 데이터 테이블(녹색 삼각형)에서 Distribution 스크립트를 실행하려고 하면 결과를 표시하는 대신 Distribution 플랫폼 창이 열립니다.</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>디에스</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>
Re: JSL: 새 스크립트 명령의 이상한 동작에 대한 도움말제가 가장 먼저 추측하는 건 Column()의 사용입니다.
배포 플랫폼에서 인수 이름이 "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()은 Graph Builder와 함께 사용되지 않으며 X(), Y() 등을 사용합니다.
Re: JSL: 새 스크립트 명령의 이상한 동작에 대한 도움말아마 맞는 말씀이실 겁니다. evaexpr은 플랫폼의 열 구문을 열로 변환하려고 합니다. 다음과 같이 작동할 수 있습니다.
Expr( Column( DOETable, N Items( ListNames ) ) )
//becomes (untested...)
Column( Expr(DOETable), expr( N Items (ListNames ) ) )
각 플랫폼의 구문은 그룹화를 위해 함수와 유사한 구조를 사용하는 경우가 많은데, 플랫폼에서 사용하는 이름이 함수 이름과 같으면 혼동될 수 있습니다. expr은 표현식에 삽입할 수 있는 상수로 평가되어야 하므로, 여전히 재정렬이 필요합니다.
Re: JSL: 새 스크립트 명령의 이상한 동작에 대한 도움말안녕하세요 @크레이지_헤일스 와 @jthi ,
사실, 문제는 둘 다 약간 섞여 있었습니다. 첫째, Column() 호출이 Expr() 호출에 포함되어서는 안 되었습니다. 둘째, Distribution 플랫폼에 대한 열에 대한 적절한 참조를 사용해야 했지만, 부모 JSL 내에 데이터 테이블 스크립트로 저장했기 때문에 열을 :"name"n으로 참조할 수 없었습니다. 따라서 해당 JSL 내에서 Eval Insert()를 빌드하고, Expr() 호출 내에서 Parse()를 실행해야 했습니다.
결국 Distribution 플랫폼에서 효과가 있었던 것은 다음과 같습니다.
Eval(
Eval Expr(
Distribution(
Continuous Distribution( Column( Expr( Parse( Eval Insert( ":\!"^ListNames[Nitems(YCols)+1]^\!"" || "n" ) ) ) ) ),
Process Capability( 0 )
)
)
);
이렇게 하면 배포 플랫폼에 대한 적절한 열 이름 참조가 생성되고, 데이터 테이블에 저장할 수 있는 실행 가능한 스크립트가 생성됩니다. 제 생각에는 다소 번거롭지만, 작동하고, 그게 중요합니다.
제안해 주셔서 감사합니다!
디에스