Hola,
Necesito crear una nueva columna de fórmula mediante un script usando variables para los nombres de las columnas y constantes.
Probé varias combinaciones de Expr, Eval, Parse, Eval Insert sin éxito.
Ver muestra.
Gracias
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))));
);
Usando
for (i = 1, i <= ncols(dt), i++,
cuando agrega una nueva columna dentro del bucle For(), el bucle nunca llega a su fin.Los ncols(dt) aumentan en 1 con cada ciclo y, por lo tanto, nunca llegaré a ncols(dt);
El elemento fórmula() de una función New Column() no analiza su contenido tal como se crea para la columna.Solo analiza su contenido cuando se ejecuta la fórmula para cada fila.Por lo tanto, las referencias de columnas y filas pueden causar problemas cuando se cambian esos valores.La forma correcta de manejar esto es sustituir en la fórmula los valores reales de la columna y la fila, antes de crear la fórmula.
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
)
);
);