Salut,
Je dois créer une nouvelle colonne de formule via un script en utilisant des variables pour les noms de colonnes et la constante.
J'ai essayé diverses combinaisons de Expr, Eval, Parse, Eval Insert en vain.
Voir exemple.
Merci
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))));
);
En utilisant
for (i = 1, i <= ncols(dt), i++,
lorsque vous ajoutez une nouvelle colonne dans la boucle For(), la boucle ne se termine jamais.Le ncols(dt) augmente de 1 à chaque boucle, et donc je n'atteindrai jamais ncols(dt) ;
L'élément formula() d'une fonction New Column() n'analyse pas son contenu tel qu'il est créé pour la colonne.Il analyse uniquement son contenu lorsque la formule est exécutée pour chaque ligne.Par conséquent, les références de col et de ligne peuvent provoquer des problèmes lorsque ces valeurs sont modifiées.La bonne façon de gérer cela est de substituer dans la formule les valeurs réelles de col et de ligne, avant la création de la formule.
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
)
);
);