JSL: Hilfe bei seltsamem Verhalten des Befehls „Neues Skript“Hallo Scripter,
(W11, 64-Bit, JMP Pro 18.1.1)
Ich habe ein Skript ausgeführt, das seltsame Aktionen ausführt. Das Skript führt mehrere Aufgaben aus, erstellt aber unter anderem neue Skripte, die der Datentabelle hinzugefügt werden. Ich muss dem neuen Skript einige Variablen übergeben und es in der Datentabelle außerhalb des ursprünglichen JSL ausführen lassen. Ich füge der Datentabelle zwei neue Skripte hinzu. Eines dient zur Visualisierung der Daten mit Graph Builder (funktioniert einwandfrei), das andere zur Visualisierung der Daten mit der Distribution-Plattform.
Hier ist das JSL, das das Graph Builder-Skript hinzufügt (es funktioniert hervorragend und macht genau das, was ich will):
Eval(
Eval Expr(
DOETable << New Script(
"Visualize Graphic Results",
Current Data Table()<
<GRAPH builder=""></GRAPH>
<P>Ähnlich verhält es sich mit dem Skript für die Verteilungsvisualisierung, das nicht wie vorgesehen funktioniert:</P> <CODE class=" language-jsl">Eval(
Eval Expr(
DOETable << New Script(
"Visualize Distribution Results",
Current Data Table()<
<DISTRIBUTION></DISTRIBUTION> <P>Wenn ich das übergeordnete Skript ausführe, werden die beiden neuen Tabellenskripte hinzugefügt (auch hier funktioniert das GB-Skript einwandfrei), aber wenn ich versuche, das Verteilungsskript aus der Datentabelle (grünes Dreieck) auszuführen, wird statt der Anzeige der Ergebnisse das Fenster der Verteilungsplattform geöffnet.</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>HINWEIS: Namen wurden entfernt, um die Unschuldigen zu schützen ;-).</P> <BR /> <P>Erstens sollte dies nicht passieren, sondern es sollten eigentlich alle Verteilungen angezeigt werden, die im neuen Skript festgelegt sind (wenn ich das Skript schrittweise im übergeordneten JSL ausführe, funktioniert es).</P> <BR /> <P>Und hier ist der wirklich merkwürdige Teil. Wenn ich das neue Skript in der Datentabelle öffne (Skript bearbeiten) und auf „Ausführen“ klicke, funktioniert es genau wie vorgesehen.</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>Ich weiß nicht, was ich falsch mache – die JSL funktioniert, aber aus irgendeinem Grund funktioniert sie nicht, wenn ich versuche, sie über das grüne Dreieck auszuführen. Das ergibt für mich keinen Sinn. Habe ich etwas übersehen oder irgendwo einen falschen Aufruf/Befehl? Ist dieses seltsame Verhalten auch anderen aufgefallen, und wenn ja, wie haben Sie es umgangen?</P> <BR /> <P>Jede Hilfe wird sehr geschätzt, danke!</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>Automatisierung und Skripting</LINGO-LABEL>
<LINGO-LABEL>Datenexploration und -visualisierung</LINGO-LABEL>
</LINGO-LABS>
Betreff: JSL: Hilfe bei seltsamem Verhalten des Befehls „Neues Skript“Meine erste Vermutung ist die Verwendung von Column().
Die Distributionsplattform hat das Argument „Spalte“ schrecklich benannt. Beachten Sie, wie Spalten hier eingegeben werden
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
obj = dt << Distribution(Column(:Age, :Weight));
im Vergleich zum Graph Builder
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))
);
Mehr anzeigen...
Column() wird nicht mit Graph Builder verwendet, sondern X(), Y() usw.
Betreff: JSL: Hilfe bei seltsamem Verhalten des Befehls „Neues Skript“Ich denke, du hast wahrscheinlich recht. Der evalexpr versucht, die Spaltensyntax der Plattform in eine Spalte umzuwandeln. Das könnte so funktionieren:
Expr( Column( DOETable, N Items( ListNames ) ) )
//becomes (untested...)
Column( Expr(DOETable), expr( N Items (ListNames ) ) )
Die Syntax der einzelnen Plattformen verwendet häufig diese funktionsähnliche Struktur zur Gruppierung. Wenn der von der Plattform verwendete Name mit einem Funktionsnamen übereinstimmt, ist dies verwirrend. Sie müssen dennoch neu anordnen, da der Ausdruck eine Konstante ergeben muss, die in den Ausdruck eingefügt werden kann.
Betreff: JSL: Hilfe bei seltsamem Verhalten des Befehls „Neues Skript“Hallo @Craige_Hales und @jthi ,
Das Problem war eigentlich eine Mischung aus beidem. Erstens hätte der Column()-Aufruf nicht im Expr()-Aufruf enthalten sein dürfen. Zweitens musste die korrekte Spaltenreferenz für die Distributionsplattform verwendet werden. Da ich dies aber als Datentabellenskript innerhalb der übergeordneten JSL speichere, kann ich die Spalte nicht einfach als :"name"n referenzieren. Ich muss dies innerhalb von Eval Insert() erstellen und anschließend innerhalb von Expr() Parse() ausführen.
Folgendes hat letztendlich für die Distributionsplattform funktioniert:
Eval(
Eval Expr(
Distribution(
Continuous Distribution( Column( Expr( Parse( Eval Insert( ":\!"^ListNames[Nitems(YCols)+1]^\!"" || "n" ) ) ) ) ),
Process Capability( 0 )
)
)
);
Dadurch wurde die korrekte Spaltennamenreferenz für die Distributionsplattform erstellt und ein ausführbares Skript ermöglicht, das in der Datentabelle gespeichert werden konnte. Meiner Meinung nach etwas umständlich, aber es funktioniert, und darauf kommt es an.
Danke für Ihre Vorschläge!
DS