:folded_hands: Ausdrucksindizierung: Lese- und Schreibzugriff☑ coole neue Funktion
☐ könnte vielen Benutzern helfen!
☐ behebt einen „Bug“
☐ schön zu haben
☐ niemand braucht es
Was hat Sie zu dieser Wunschliste inspiriert?
Bearbeiten: Erster Teil verschoben auf Ausdrucksindizierung: Wie erklimmt man den Ausdrucksbaum?
Danke @jthi für die Bereitstellung einer Lösung:
ÜberAusdruck extrahierenEin Benutzer hat die Möglichkeit, Teile von Ausdrücken zu suchen und zu extrahieren.
Die Funktion führt eine Mustersuche durch und gibt die erste Übereinstimmung zurück.
Auch Wildcards sind möglich
Welche Verbesserung würden Sie gerne sehen?
Eine Mischung aus Display Tree Indexing und Data Table Indexing – nur für Ausdrücke:
Ein präziserer Lesezugriff erfolgt über:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
myExpr=Expr(gb = dt << Graph Builder(
Size( 437, 413 ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Y(:height), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
));
//instead of:
Arg(Arg(Arg(Arg(Arg(myExpr,2),2),3),3),1)
<BR />// I want to use:
myExpr[2][2]["Variables"]["Y"(2)][1]
//assign // send // Graph Builder // Variables<BR /><BR />// or like it's possible for Display Trees:<BR />myExpr["Variables"]["Y"(2)][1]
Und jetzt wird es richtig cool: Schreibzugriff ähnlich dem, was über die Datentabellenindizierung möglich ist:
myExpr["Variables"]["Y"(2)][1] = Expr(:height);
Wie Substitute – aber in einer anderen Dimension!
[bearbeiten]
Und vielleicht die beste Anwendung der Ausdrucksindizierung: Einfügen in , zB:
Insert Into ( myExpr["Variables"], Expr(Y(:age)))
Warum ist diese Idee wichtig?
Mit der Leistung der Ausdrucksindizierung wird die Ausdrucksbehandlung in Jmp einfacher:)
weitere Wünsche eingereicht von 
Automatisierung und SkriptingBetreff: Ausdrucksindizierung: Lese- und Schreibzugriff - Status geändert in: BestätigtBetreff: Ausdrucksindizierung: Lese- und SchreibzugriffMerkwürdigkeit von JMP Expr(), kann das jemand erklären?
Stellen Sie für „Einfügen in “ neben dem aktuellen Turbomodus bitte einen zusätzlichen „Nichtzusammenführungsmodus“ bereit ….
Turbomodus (wie sich „Einfügen in“ jetzt verhält):
Wenn der Kopf des einzufügenden Ausdrucks mit dem Kopf der Ebene über der Zielposition übereinstimmt, wird der Ausdruck mit der höheren Ebene „zusammengeführt“.
Insert Into (List(a,b), List(c,d)) // {a,b,c,d}zusätzlicher Nichtzusammenführungsmodus:
Insert Into (List(a,b), List(c,d), merge(0)) // {a,b,{c,d}}
Da die Einrichtung der Ausdrucksindizierung ziemlich aufwändig ist – und die Mehrheit der JMP-Benutzer sie nicht verwenden wird – besteht wenig Hoffnung, dass der Wunsch umgesetzt wird.
Wunsch ausschneiden für Einfügen in: Einfügen in: Abflachen (0|1)
Betreff: Ausdrucksindizierung: Helfen Sie mir beim Erklimmen des AusdrucksbaumsDanke @Craige_Hales für das schöne Beispiel:)
Ich hoffe, dass auch andere die Idee unterstützen werden ...
Betreff: Ausdrucksindizierung: Helfen Sie mir beim Erklimmen des AusdrucksbaumsWie würden Sie dies umwandeln
myExpr = Expr(
gb = dt << Graph Builder(
Size(437, 413),
Graph Spacing(4),
Variables(X(:height), Y(:weight), Overlay(:sex)),
Elements(Points(X, Y, Legend(1)), Smoother(X, Y, Legend(2)))
)
);
dazu?
myExpr = Expr(
gb = dt << Graph Builder(
Size(437, 413),
Graph Spacing(4),
Variables(X(:height), Y(:weight), /*added:*/ Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(1)), Smoother(X, Y, Legend(2)))
)
);
Eine Indizierung könnte es viel einfacher machen. Es fühlt sich an wie ein InsertInto( myExpr, ... )-Problem. Das wird funktionieren, wenn Sie herausfinden können, wie Sie die Operatoren in Listen und dann wieder zurück umwandeln können, aber so etwas wie
InsertInto( myExpr[/* = */ 2][ /* << */ 2]["Variables"], /* insert position*/ 3, expr( Y(:height)))
könnte den Ausdruck an Ort und Stelle bearbeiten.
Machbarkeitsnachweis:
myExpr = Expr(
gb = dt << Graph Builder(
Size( 437, 413 ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
)
);
Show( "Original", Name Expr( myExpr ) );
// convert operators to lists
Substitute Into( myExpr, Expr( Assign() ), {} );
Substitute Into( myExpr[2], Expr( Send() ), {} );
Substitute Into( myExpr[2][2], Expr( Graph Builder() ), {} );
Substitute Into( myExpr[2][2][3], Expr( Variables() ), {} );
// make the edit
Insert Into( myExpr[2][2][3], Expr( Y( :height ) ), 3 );
// reverse the earlier conversions
Substitute Into( myExpr[2][2][3], {}, Expr( Variables() ) );
Substitute Into( myExpr[2][2], {}, Expr( Graph Builder() ) );
Substitute Into( myExpr[2], {}, Expr( Send() ) );
Substitute Into( myExpr, {}, Expr( Assign() ) );
Show( "Edited", Name Expr( myExpr ) );
//
// wouldn't it be nice if we could use the edit line directly?
//
Write( "\!nTry without a list:" );
Insert Into( myExpr[2][2][3], Expr( Y( :height ) ), 3 ); // does not work
// it fails because expressions can't be indexed, even though they
// are extremely similar to lists (as seen above).
// I'm not sure why it needs to be that way.
Wir verwenden gerne die xxxInto(...)-Funktionen, da sie einen vorhandenen Ausdrucksbaum direkt ändern. In einigen Fällen kann dies ein Effizienzproblem darstellen (im Vergleich zum Erstellen von Kopien von Fragmenten eines Ausdrucks und zum erneuten Erstellen), aber es ist auch etwas klarer, die Operatoren als Listen zu behandeln.
Danke @hogi , @jthi
Betreff: Ausdrucksindizierung: Helfen Sie mir beim Erklimmen des Ausdrucksbaums@jthi , mit der schönen Lösung hat das Thema meiner Meinung nach in den Diskussionen einen viel besseren Platz:
https://community.jmp.com/t5/Discussions/Expression-Indexing-How-to-climbing-the-Expression-Tree/mp/697406
könntest du bitte deinen Kommentar dort hinzufügen - dann werde ich ihn als Lösung akzeptieren
Betreff: Ausdrucksindizierung: Helfen Sie mir beim Erklimmen des AusdrucksbaumsDanke @jthi !
Super - Ausdruck extrahieren - viel besser als mein Workaround über Ersetzen (... Liste):
-> Behebt die Probleme 1 und 3
Für Problem Nr. 2 ist das zweite Beispiel ein guter Workaround – und gleichzeitig:
veranschaulicht die Einfachheit vonAusdrucksindizierung.
Da Extract expr verfügbar ist, besteht kein dringender Bedarf für den Lesezugriff auf die Expression Indexing.:)
bearbeiten :
argh! Extract Expr findet nur das erste Vorkommen!
Betreff: Ausdrucksindizierung: Helfen Sie mir beim Erklimmen des AusdrucksbaumsJMP hat Extract Expr, was einige dieser Dinge einfacher macht
Names Default To Here(1);
myExpr = Expr(
gb = dt << Graph Builder(
Size(437, 413),
Graph Spacing(4),
Variables(X(:height), Y(:weight), Overlay(:sex)),
Elements(Points(X, Y, Legend(1)), Smoother(X, Y, Legend(2)))
)
);
yexpr = Extract Expr(myExpr, Y(Wild()));
variables_expr = Extract Expr(myExpr, Variables(Wild List()));
Names Default To Here(1);
myExpr = Expr(
gb = dt << Graph Builder(
Size(437, 413),
Graph Spacing(4),
Variables(X(:height), Y(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(1)), Smoother(X, Y, Legend(2)))
)
);
variables_expr = Extract Expr(myExpr, Variables(Wild List()));
idx = 0;
For(i = 1, i <= N Arg(variables_expr), i++,
firstlevel = Arg(variables_expr, i); // could use Extract Expr
If(Head(firstlevel) == Expr(Y) & idx == 2,
secondlevel = Arg(firstlevel, 1);
);
);
show(secondlevel);
Betreff: :folded_hands: Ausdrucksindizierung: Lese- und Schreibzugriffeine weitere Anwendung für die Ausdrucksindizierung - Schreibmodus:
Head() ersetzen?
Es ist bereits ein Wunsch verfügbar: Ersatz für erstes Vorkommen
Ja, bitte : )
Betreff: :folded_hands: Ausdrucksindizierung: Lese- und Schreibzugriffwobei die wichtigsten Anwendungsfälle bereits vorhanden oder herausgearbeitet sind.
@Sarah-Sylvestre , der Status könnte auf gesetzt sein Derzeit nicht geplant