Sammlung nützlicher Ressourcen im Web:
- Es gibt einen wunderbaren Vortrag von @joseph_morgan in der Discovery Summit Series:
https://community.jmp.com/t5/Abstracts/Using-JSL-to-Develop-Efficient-Robust-Applications-EU-2018-415/ev-p/849638
Joseph erklärt die Geheimnisse und Möglichkeiten der Ausdrucksverarbeitung in JSL – und die damit verbundenen Fallstricke.
Die Vorlesung basiert auf dem Inhalt von „Funktionen zur Ausdrucksverarbeitung: Teil I – Das Rätsel um Expr(), NameExpr(), Eval(), ... lösen“.
- Dynamisches Schreiben von JSL-Code von @Jasean
(Schritt-für-Schritt-Anleitung zu den Universaltricks Nr. 1 und 2, siehe unten)
- Der Unterschied zwischen Zeichenketten und Ausdrücken – in 50 Zeilen:
Antwort auf einen Community-Beitrag von @Craige_Hales
- Ein toller Kurs mit vielen Anwendungsbeispielen: Sitzung 9: Fortgeschrittenes JSL , @jthi
- Weitere Informationen finden Sie im Skripting-Leitfaden: fortgeschrittene Ausdrücke, Makros und Listen.
Grundlagen
intern:
#062 - Ausdrucksbehandlung in JSL
#092 - Ausdrucksbehandlung
| 1 |
Der Ausdruck (2+1) wird nicht ausgewertet. Speichere es einfach in der Variablen x ab. |
x = Expr (2+1) |
| 2 |
Ermitteln Sie den Ausdruck, der in x gespeichert ist. |
Name Ausdruck (x) |
| 3 |
Kräftebewertung |
Eval (myexpr) |
| 4 |
werte xyz aus und Ersetze Expr(xyz) durch den Rückgabewert |
Eval Expr( ... Expr(xyz)) |
*) Anmerkung: In 1 und 4 handelt es sich um dieselbe Funktion " Expr(...)" - jedoch mit gegenteiligem Effekt:
In Fall 1 wird der Inhalt von Expr nicht ausgewertet, in Fall 4 wird NUR der Inhalt von Expr ausgewertet
3 universelle Tricks
| 1 |
Teile eines Ausdrucks können mit Eval Expr() vorab ausgewertet werden. ... und werte dann den Ausdruck mit Eval() aus. Löst 90 % (bei Option 2: 99 %) aller Probleme |
Eval( Eval Expr ( ... Exp (eval 1st) ...)) Option 2: Eval( Eval Expr ( ... Exp (Name Expr( )) ...))
|
| 2 |
Löst die gleichen 99% wie # 1 - Option 2 |
Eval(substitute(Expr(), Expr(), Name Expr() ))
|
| 3 |
ultimate trick for Spaltenverweise ( @jthi, e.g. Sitzung 9: Fortgeschrittenes JSL @33min ) |
Name Expr ( als Spalte ("Spaltenname" oder : Spalte)) |
Anmerkung:
Manche Funktionen werten ihre Argumente aus, manche nicht, manche nur einen Teil – es gibt Funktionen wie `head()` , die ihre Argumente bis zu einem gewissen Grad auswerten: Wertet `head()` sein Argument aus? – und andere werten zwar ihr Argument aus, verhalten sich aber bei einer einzelnen Variable wie `NameExpr()` . Ausnahmen bilden die Hilfsfunktionen `Show`, `Write` und `Print`.
Leider stehen den Nutzern die meisten dieser Details nicht zur Verfügung. Die Nutzer müssen raten.
Hier ein Wunsch für den JSL-Editor, der den Benutzern hilft, indem er diese Informationen interaktiv anzeigt: Erweiterte Syntaxhervorhebung im JSL-Editor - wertet die Funktion ihr Argument aus?
-> Wenn Sie diese automatische Unterstützung erhalten möchten, folgen Sie bitte dem Link und stimmen Sie ab!
Beispiele aus der Community:
| Thema |
Links |
Details |
| Spalte() vs. Als column() vs. Name() |
Warum führen diese Arten der Spaltenreferenzierung zu unterschiedlichen Ergebnissen?Wie kann man in JMP JSL :column_name durch eine Variable ersetzen?Column() vs As Column() vs datable:column vs dt:As name("column") |
Die universelle Syntax zum Verweisen auf eine Spalte lautet :Spalte . Doch oft ist es knifflig, " :Spalte " korrekt anzugeben ... |
| Spaltenbezüge in Spaltenformeln |
Fügen Sie einen Ausdruck in einen anderen ein, indem Sie Eval Insert, Eval Expr, Parse und Substitute verwenden. Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte aber eine Fehlermeldung. Verwenden Sie expr(), um variable Spaltennamen in einer Formel zu ersetzen.Hinzufügen von Formelspalten basierend auf der SpaltennamenlisteErstellen einer Formelspalte aus einer Liste (JSL)Ich benötige Hilfe bei Ausdrücken, Spaltenbezügen, Formeln und der Umbenennung von Spalten.Erstellen Sie neue Spalten durch eine Schleifenformelberechnung mit spezifischen SpaltennamenJSL zum Erstellen einer Formelspalte mit variablen Spaltennamen Spaltenname aus Zeichenfolge Skript zum Verketten von Spalten Verwendung von Expr() und Eval() mit Variablennamen innerhalb einer SchleifeSpaltenvariable im WENN-Ausdruck verwenden JSL: Erstellen einer Formel mit einem variablen Spaltennamen Formelspalten mit Variablen erstellenFormel erstellen unter Verwendung vorhandener Spaltennamen Spalten iterieren |
Die Spalte definieren über col = Name Expr(As Column(colname)) und füge es mit Eval(Substitute()) ein.
Alternativen: As Column (Expr(colname)) mit Eval(Eval Expr()) oder Expr(Name Expr(AsColumn(dt, colname))) mit Eval(Eval Expr()) ... |
| Spaltenreferenzen in Plattformaufrufen und Nachrichten |
JSL hilft bei der korrekten Referenzierung einer SpalteEine Plattform betreiben, ohne die Anzahl oder die Namen der Spalten zu kennen Verteilung mithilfe einer Spaltenliste JSL: Hilfe zum korrekten Referenzieren einer Datentabellenspalte für die Distributionsplattform |
verwenden Name Expr(As Column(colname)) mit Eval(substitute())
... oder falls Sie Probleme mit einer Spaltenliste haben, fügen Sie einfach eval() oder evallist() zum Argument Spalte() hinzu. |
| Verwenden einer Spaltenreferenz in einem Funktionsaufruf |
Spaltenreferenz in benutzerdefinierter FunktionBenutzerdefinierte Funktion – So referenzieren Sie die Spalte |
- Umschließen Sie die Spalte mit Name Expr() - eine Liste verwenden |
| einen Ausdruck konstruieren |
Lässt sich das konstruieren, ohne den Ausdruck als Zeichenkette zu schreiben?Eine Plattform betreiben, ohne die Anzahl oder die Namen der Spalten zu kennenVerwendung von Spaltenlisten in Formeln Wie man eine Aggregatspalte aus einer variablen Liste von Spaltenreferenzen erstellt |
- Beginnen Sie mit einem leeren Entwurf und füllen Sie ihn mit insert into(draft, arguments) - Ersatz verwenden - Erstelle eine Liste und ersetze die Liste durch ein anderes JSL-Symbol |
| weitere Umgehungsmöglichkeiten durch Ausdrucksbehandlung |
Zeilen bei der Spaltenquantilberechnung ausschließen |
Unangemessenes Caching in Col Quantile wird durch die Verwendung eines Ausdrucks verhindert. |
| Von Version zu Version wird weniger Ausdrucksverarbeitung benötigt, damit die Dinge funktionieren. |
Link? |
|
[MehrThemencontainerso was]
Hi @hogi ,
Thanks for consolidating this information and bringing a lot of this information together. The talk sounds really informative.
I do like how you can do things several different ways in JMP and in JSL, but sometimes there are too many different ways that are very specific to the case at hand, and this can become somewhat cumbersome when trying to make code that is generic and able to handle many different scenarios.
Thanks!,
DS
Wenn Sie die Tricks nicht anwenden:
JSL und Variablen – 3 Probleme, die Sie beim Schreiben von JSL-Code beachten sollten.
Verschiedene Probleme, immer die gleiche Lösung : )
die Lösung?
-> einfach den Hauptbeitrag lesen.
c= 5;
col = Name Expr(:height);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = graph Builder(); framebox = report(gb)[FrameBox(1)];
// issues with variables in a message
// all 3 of them look quite innocent
// but none of them will survive a restart
New Column ("rescaled", Formula (c * :height));
dt << New Column ("rescaled", Formula (5 * col));
framebox << Add Graphics Script(Y Function( c * x, x ) );
// no issue here:
dt << concatenate(dt);
dt << new column(c, formula(3));Man könnte meinen: Verwenden Sie niemals eine Variable in einer Nachricht!
Aber das geht viel zu weit – die letzten beiden Beispiele haben kein Problem.