CIAO,
Devo creare una nuova colonna formula tramite script utilizzando variabili per nomi di colonne e costanti.
Ho provato varie combinazioni di Expr, Eval, Parse, Eval Insert senza alcun risultato.
Vedi campione.
Grazie
row = 11;
col = "foo";
for (i = 1, i <= ncols(dt), i++,
dt << New Column( "ratio " || char(i), numeric,
formula(( column(col) - column(col)[row] ) / (Col Max(col) - Col Min(col))));
);
Utilizzando
for (i = 1, i <= ncols(dt), i++,
quando aggiungi una nuova colonna all'interno del ciclo For(), il ciclo non termina mai.Ncols(dt) aumenta di 1 ad ogni ciclo, e quindi non raggiungerò mai ncols(dt);
L'elemento formula() di una funzione New Column() non ne analizza il contenuto quando viene creato per la colonna.Ne analizza il contenuto solo quando la formula viene eseguita per ogni riga.Pertanto, i riferimenti alle colonne e alle righe possono causare problemi quando tali valori vengono modificati.Il modo corretto per gestire questa situazione è sostituire nella formula i valori effettivi di colonna e riga prima che la formula venga creata.
Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
row = 11;
col = "height";
stop = n cols(dt);
For( i=1, i<= stop, i++,
Eval(
Substitute(
Expr(
dt << New Column( "ratio " || Char( i ),
numeric,
formula( (As Column( _col_ ) - As Column( _col_ )[_row_]) / (Col Max( As Column( _col_ ) ) - Col Min( As Column( _col_ ) )) )
)
),
Expr( _col_ ), col,
Expr( _row_ ), row
)
);
);