Kann einen Ausdruck nicht "auswerten".Hallo zusammen,
Ich kämpfe mal wieder mit einem Drehbuch...
Dieser baut einen Ausdruck auf. Es sieht in Ordnung aus.
Ich kann es sogar aus der Protokolldatei kopieren und zurück in das Skriptfenster einfügen, und wenn ich dies tue, wird es korrekt mit der erwarteten Ausgabe ausgeführt.
Aber ich habe Eval(), Eval Expr(), Eval(Eval Expr()), Eval(Parse()) ausprobiert ... nun, das letzte mit noch weniger Hoffnung als die anderen, aber unterm Strich ... Ich schaffe es einfach nicht!
Names Default To Here( 1 );
ParamsList = {
{"P1", "Parameter 1"},
{"P2", "Parameter 2"}
};
analysis = Expr(Analysis Column());
For (i=1, i<= Length(ParamsList), i++,
Insert Into(
analysis,
Substitute(
Expr(Transform Column("__Desc__", Formula(__Parameter__))),
"__Desc__", ParamsList[i][2]||" Median",
Expr(__Parameter__), Parse(":"||ParamsList[i][1]||"_Q50")
)
);
);
addRowExpr = Expr(Row Table());
Insert Into(addRowExpr, Eval Expr(analysis));
Insert Into(addRowExpr, Expr(Statistics(Median)));
addTabExpr = Expr(Add Table(Column Table(Grouping Columns(:Source))));
Insert Into(addTabExpr, Eval Expr(addRowExpr));
tabExpr = Expr(Tabulate(Set Format(Uniform Format(10,2))));
Insert Into(tabExpr, Eval Expr(addTabExpr));
show(tabExpr);
dtParams = Eval(Eval Expr(tabExpr));Ich hänge eine "Test.jmp"-Datei an, die Sie ausprobieren können.
Die Ausgabe des "show"-Befehls ist:
tabExpr = Tabulate(Set Format(Uniform Format(10, 2)), Add Table(Column Table(Grouping Columns(:Source)), Row Table(Analysis Column(Transform Column("Parameter 1 Median", Formula(:P1_Q50)), Transform Column("Parameter 2 Median", Formula(:P2_Q50))), Statistics(Median))));Und wie gesagt: Wenn ich es zurück in das Skriptfenster kopiere und einfüge, um diese Ausgabe auszuführen, bekomme ich, was ich will!
Also, wie "bewerte" ich diesen Ausdruck?
Vielen Dank!
Betreff: Ausdruck kann nicht "evaluiert" werdenHallo Jim,
Deine Lösung funktioniert tatsächlich! Vielen Dank.
Ich kontaktiere den Support.Betreff: Ausdruck kann nicht "evaluiert" werdenMit meinem "Morgenhirn" habe ich herausgefunden:
eval(parse(char(evalexpr(tabexpr))))
wodurch der erstellte Ausdruck ausgeführt werden kann.
Ich stimme Ian zu, der Code sollte wie entwickelt funktionieren, und ich schlage vor, Sie posten das Problem an:
support@jmp.com
Betreff: Ausdruck kann nicht "evaluiert" werdenDas ist in der Tat seltsam, und ich habe nicht viel hinzugefügt, außer den Code an einer Stelle zu platzieren. Ich vermute, dass es mit der Verwendung virtueller Spalten zusammenhängt, muss aber genauer untersucht werden.
Names Default To Here( 1 );
ClearLog();
dt = New Table( "Test",
Add Rows( 5 ),
New Column( "P1_Q50",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [32.6, 54.8, 48.9, 28, 51.4] )
),
New Column( "P2_Q50",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [9, 7, 8, 6, 12] )
),
New Column( "Source",
Character( 1 ),
"Nominal",
Set Values( {"A", "B", "B", "A", "B"} )
)
);
ParamsList = {
{"P1", "Parameter 1"},
{"P2", "Parameter 2"}
};
analysis = Expr(Analysis Column());
For (i=1, i<= Length(ParamsList), i++,
Insert Into(
analysis,
Substitute(
Expr(Transform Column("__Desc__", Formula(__Parameter__))),
"__Desc__", ParamsList[i][2]||" Median",
Expr(__Parameter__), Parse(":"||ParamsList[i][1]||"_Q50")
)
);
);
addRowExpr = Expr(Row Table());
Insert Into(addRowExpr, Eval Expr(analysis));
Insert Into(addRowExpr, Expr(Statistics(Median)));
addTabExpr = Expr(Add Table(Column Table(Grouping Columns(:Source))));
Insert Into(addTabExpr, Eval Expr(addRowExpr));
tabExpr = Expr(Tabulate(Set Format(Uniform Format(10,2))));
Insert Into(tabExpr, Eval Expr(addTabExpr));
show(tabExpr);
NewWindow("tabExpr", tabExpr);
NewWindow("Eval(Parse(Char(NameExpr(tabExpr))))", Eval(Parse(Char(NameExpr(tabExpr)))));Betreff: Ausdruck kann nicht "evaluiert" werdenEs ist sicherlich seltsam, dass der Code in offenem Code nicht vollständig ausführbar zu sein scheint. Die einzige Möglichkeit, dies zu tun, bestand darin, Ihren Ausdruck tabExpr in einen Literal-String umzuwandeln und ihn mit Eval (Parse ()) auszuführen.
eval(parse("Tabulate(
Set Format( Uniform Format( 10, 2 ) ),
Add Table(
Column Table( Grouping Columns( :Source ) ),
Row Table(
Analysis Column(
Transform Column(\!"Parameter 1 Median\!", Ordinal, Formula( :P1_Q50 ) ),
Transform Column(\!"Parameter 2 Median\!", Ordinal, Formula( :P2_Q50 ) )
),
Statistics( Median )
)
)
);"))
Vielleicht hat einer der anderen Community-Mitglieder eine Idee
Betreff: Ausdruck kann nicht "evaluiert" werdenArgh!
Ich verstehe Ihr Problem. Ich habe Test.jmp hochgeladen, bevor ich eine Änderung gespeichert habe.
Hier ist die richtige Version.
Erwartete Ausgabe (durch Kopieren des Ergebnisses von show() in das Protokoll)

Die Gründe, warum ich mit einem Skript wie diesem gehe, sind:
-Die Liste der Parameter in der realen Anwendung ist viel länger
-Die Parameter ändern sich abhängig von meinen Eingabedaten, sind aber immer dokumentiert.
Betreff: Ausdruck kann nicht "evaluiert" werdenWas ist Ihre erwartete Ausgabe? Ich sehe, dass viele Dinge generiert und in Listen platziert werden, aber ich sehe nichts, was mit diesen Dingen gemacht wird.
Betreff: Ausdruck kann nicht "evaluiert" werdenHallo, Justin,
Hier funktioniert es nicht. Ich bin auf JMP 12.1, falls das hilft.
Es erstellt eine Tabelle, füllt jedoch nicht den Inhalt. Ich bekomme Spalten A und B.
Ich habe eine einzelne Reihe und die Anzahl von A und B.Betreff: Ausdruck kann nicht "evaluiert" werdenWenn Sie einfach "tabExpr" ausführen, wird der Ausdruck ausgewertet.
tabulateObject = tabExpr;