come passare una colonna come parametro in una formulaCIAO,
Sto cercando di creare una formula semplice su colonne memorizzate come variabili in un elenco.
Non capisco perché JSL si rifiuti di eseguire la formula.
Se cambio nella formula il parametro per la stringa che memorizza, funziona perfettamente.
Qualsiasi aiuto ??
Ecco il codice che uso:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
for(j=1, j <= N items(MyList), j++,
dt << New Column( ParamPlot[j], Formula( 2* ParamPlot[j]) );
);
Ho provato cose come Eval, Eval expr,...ma per niente 
Ri: come passare una colonna come parametro in una formulaBreve ed efficiente 
Molte grazie 
Ri: come passare una colonna come parametro in una formulaNon ho resistito a un'ultima ripresa. Breve e dolce e funziona. Utilizzo evalinsert valutare le variabili, :nome() fare riferimento a colonne, "\[ ]\" per consentire le virgolette doppie all'interno di una stringa e infine utilizzare eval(analisi()) per eseguire la stringa risultante.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
new_col_expr = evalinsert("\[dt << New Column("^paramplot[j]^", Formula(2 * :name("^mylist[j]^")))]\");
eval(parse(new_col_expr));
);Ri: come passare una colonna come parametro in una formulaInnanzitutto grazie a tutti per le risposte...
Ecco la mia opinione su tutte le soluzioni proposte:
1/ La soluzione proposta da Mark: funziona perfettamente (anche se difficile da leggere quando non è abituato a valutare, analizzare, sostituire,...).
2/ La soluzione proposta da Jan: Effettivamente, meglio agli occhi (usa anche eval, replaceinto,...). Tra l'altro funziona perfettamente.
3/ La soluzione di Byron: utilizza anche Eval, sostituto, expr...Funziona perfettamente
4/ La soluzione di pmroz è di gran lunga la più semplice (per gli occhi), ma la formula che otteniamo fa ancora riferimento a MyList e non alle colonne che dovrebbero rappresentare... Significa che se cambio un valore nella colonna "age " , la colonna "età2" non verrà aggiornata.
Grazie a tutti per i suggerimenti 
Ri: come passare una colonna come parametro in una formulaCome ha detto Byron, stai cercando di creare una nuova colonna che sia 2 volte se stessa. Penso che questo sia quello che vuoi. AS COLONNA ha fatto il trucco.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
dt << New Column( ParamPlot[j], Formula( 2 * as column(dt, MyList[j]) ) )
);
Funziona alla grande finché non aggiungi righe. Quindi avrai bisogno di evals, exprs ecc.
Ri: come passare una colonna come parametro in una formulasembra che tu stia cercando di creare una formula che si moltiplichi per 2. questo non funzionerà e dovrebbe restituire un valore vuoto.
Inoltre, "j" è una funzione per creare matrici (si noti che diventa blu nell'editor JSL), quindi di solito evito di usare "j" come variabile nel caso in cui possa essere interpretata in modo inaspettato.
Lavorare con nomi di colonne e riferimenti può essere piuttosto frustrante. Dai un'occhiata a questa strategia.
All'interno del ciclo, prima viene creata la colonna e, man mano che viene creata, viene assegnato un handle "newcol" da utilizzare come riferimento. Poi c'è la grande clausola eval(substitute)). All'interno di questo argomento, la "col<
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( i = 1, i <= N Items( MyList ), i++,
newcol=dt << New Column( ParamPlot[i] );
Eval(
Substitute(
Expr(
newcol << set formula( a * 2 ) ) ,
Expr( a ), As Name( mylist[i] )
);
));Ri: come passare una colonna come parametro in una formulaForse questo è leggermente migliore (agli occhi di alcuni):
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
CMD = Expr(dt << New Column( NameTBD, Formula( 2 * colTBD) ));
SubstituteInto(CMD, Expr(NameTBD), ParamPlot[j], Expr(ColTBD), Parse(":"||MyList[j]));
CMD;
);
Ri: come passare una colonna come parametro in una formulaIl problema è che l'argomento di Formula() viene trattato come un'espressione letterale. Non valuta ParamPlot[j] e non sostituisce il risultato per creare la formula desiderata. Sembra che dovresti essere in grado di usare le espressioni, ma non ho capito dove con questo approccio, quindi ecco una soluzione basata su stringhe di caratteri:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
Eval(
Parse(
Substitute("dt << New Column( \!"nnn\!", Formula( 2 * :ppp ) )",
"nnn",
ParamPlot[j],
"ppp",
MyList[j]
)
);
);
);
Non mi piace davvero usare stringhe di caratteri, ma a volte devi fare quello che devi fare.