Impossibile "valutare" un'espressioneCiao a tutti,
Ancora una volta sono alle prese con un copione...
Questo costruisce un'espressione. Sembra a posto.
Posso persino copiarlo e incollarlo dal file di registro alla finestra dello script e, se lo faccio, viene eseguito correttamente con l'output previsto.
Ma ho provato Eval(), Eval Expr(), Eval(Eval Expr()), Eval(Parse())... beh, l'ultimo con ancora meno speranza degli altri, ma la linea di fondo è... Non riesco proprio a farlo funzionare!
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));Allego un file "Test.jmp" su cui puoi provare.
L'output del comando "show" è:
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))));E come detto: se lo copio e incollo nella finestra dello script per eseguire quell'output, ottengo quello che voglio!
Quindi, come posso "valutare" quell'espressione?
Grazie!
Ri: Impossibile "valutare" un'espressioneCiao Jim,
La tua soluzione funziona davvero! Grazie mille.
Sto contattando l'assistenza.Ri: Impossibile "valutare" un'espressioneUsando il mio "cervello mattutino" ho escogitato:
eval(parse(char(evalexpr(tabexpr))))
che consentirà l'esecuzione dell'espressione che è stata creata.
Sono d'accordo con Ian, il codice dovrebbe funzionare come sviluppato e ti suggerisco di pubblicare il problema su:
support@jmp.com
Ri: Impossibile "valutare" un'espressioneQuesto è davvero strano e non ho aggiunto molto altro che mettere il codice in un posto. Sospetto che sia correlato all'uso di colonne virtuali, ma necessita di ulteriori indagini.
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)))));Ri: Impossibile "valutare" un'espressioneÈ certamente strano che il codice non sembri essere completamente eseguibile in codice aperto. L'unico modo in cui ero in grado di farlo era convertire la tua espressione tabExpr in una stringa letterale ed eseguirla con Eval(Parse().
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 )
)
)
);"))
Forse uno degli altri membri della comunità ha un'idea
Ri: Impossibile "valutare" un'espressioneArgh!
Capisco il problema che hai, ho caricato Test.jmp prima di salvare una modifica.
Ecco la versione giusta.
Output previsto (copiando nel log il risultato dello show())

I motivi per cui vado con uno script come questo sono:
-L'elenco dei parametri nell'applicazione reale è molto più lungo
-I parametri cambieranno a seconda dei miei dati di input, ma sono sempre documentati.
Ri: Impossibile "valutare" un'espressioneQual è il tuo risultato atteso? Vedo molte cose che vengono generate e inserite in elenchi, ma non vedo nulla che venga fatto con quelle cose.
Ri: Impossibile "valutare" un'espressioneCiao Giustino,
Non funziona qui. Sono su JMP 12.1 se questo aiuta.
Quello che fa è creare un tabulato, ma non popola il contenuto. Ottengo le colonne A e B.
Ho una singola riga e il conteggio di A e B.Ri: Impossibile "valutare" un'espressioneBasta eseguire "tabExpr" per valutare l'espressione.
tabulateObject = tabExpr;