Uso de objetos numéricos en una ecuación de columnaNecesito poder tomar un objeto numérico que aumenta o disminuye en una función iterativa y usarlo en una fórmula de columna. En la siguiente ecuación, los valores de col, l y m deben evaluarse en la fórmula de columna. ¿Cómo puedo lograrlo? Parse(), Eval() y Num() no funcionan.
For( i = 1, i <=8, i++,
col = 11+i;
l = col - i;
m = col + 1 - i;
colno = Char(col);
New Column("Column "||colno, Character, "Nominal", Formula(If(Row() == 12, Lag(Column(1), l), If(Row() == 13, Lag(Column(2), m), Lag(Column(col, 1)))))));
Automatización y scriptingRe: Uso de objetos numéricos en una ecuación de columnaEsto parece funcionar. Eval( Eval Expr(....) ) evalúa las expresiones antes de crear la columna.
For( i = 1, i <= 8, i++,
col = 11 + i;
l = col - i;
m = col + 1 - i;
colno = Char( col );
Eval(
Eval Expr(
New Column( "Column " || Expr( colno ),
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( Column( 1 ), Expr( l ) ),
If( Row() == 13,
Lag( Column( 2 ), Expr( m ) ),
Lag( Column( Expr( col ), 1 ) )
)
)
)
)
)
);
);
Re: Uso de objetos numéricos en una ecuación de columnaColumn( col, 1 )
?

Re: Uso de objetos numéricos en una ecuación de columnaNinguna variable definida fuera del mensaje de la nueva columna debe utilizarse dentro del mensaje de la nueva columna() .
En mi empresa tenemos un control automático que detecta dichos problemas de programación antes de ejecutar el código.
Si se detecta un error potencial, se presenta un mensaje de advertencia al usuario con algunas sugerencias.
Re: Manejo de expresiones en JMP: Consejos y trampas
For( i = 1, i <= 8, i++,
col = 11 + i;<BR />
l = col - i;
m = col + 1 - i;
colno = Char( col );
Eval(Eval Expr(New Column( "Column " || colno,
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( Column( 1 ), Expr(l) ),
If( Row() == 13,
Lag( Column( 2 ), Expr(m) ),
Lag( Expr(Name Expr(As Column( col))), 1 )
)
)
)))
);
);
¡Ay! Como la columna no entiende números...
Re: Uso de objetos numéricos en una ecuación de columnaFor( i = 1, i <= 8, i++,
col = 11 + i;
colname = Column(col) << get name;
l = col - i;
m = col + 1 - i;
colno = Char( col );
Eval(Eval Expr(New Column( "Column " || colno,
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( Column( 1 ), Expr(l) ),
If( Row() == 13,
Lag( Column( 2 ), Expr(m) ),
Lag( Expr(Name Expr(As Column( colname))), 1 )
)
)
)))
);
);
Re: Uso de objetos numéricos en una ecuación de columnaBuen hallazgo.
Re: Uso de objetos numéricos en una ecuación de columna@hogi
Obtuve una modificación del script de mmarchandFSLR (que se muestra a continuación) para que funcione correctamente, una gran adición. No estoy seguro de entender el problema, ¿podrían aclararlo?
dt = Current Data Table();
Delete Symbols();
dt = Current Data Table();
For( i = 1, i <= 8, i++,
c = 11 + i;
l = 12 - i;
m = 13 - i;
colno = Char( c );
Eval(Eval Expr(New Column( "Column " || colno,
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( As Column( 1 ), Expr(l) ),
If( Row() == 13,
Lag( As Column( 2 ), Expr(m) ),
Lag( As Column( Expr(c)) , 1)
)
)
)))
);
);
Re: Uso de objetos numéricos en una ecuación de columnaPrimero me sorprendió que incluso después de corregir los detalles alrededor
Column( col, 1 )
La solución de @mmarchandFSLR no parece funcionar.
¿Lag() espera Como columna() , no una columna() ?
¡Esto destruye todo mi "conocimiento" de que Como columna() se utiliza para acceder al valor de la fila actual !
Respecto a Como Columna (col) en lugar de Nombre Expr(Como columna(col)):
Funciona, pero es "frágil" frente a:
- agregar una columna (¡el número no se actualiza!)
- entradas modificadas (en mi sistema, las entradas de la columna de fórmula no se actualizan)
[Eliminaré este si la situación mejora después de reiniciar]
Re: Uso de objetos numéricos en una ecuación de columnaParece que vale la pena documentarlo:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Column( "height 2", Formula( :height ));
New Column( "height 3", Formula( As Column( "height" ) ));
New Column( "height 4", Formula( As Column( 4 ) ));
New Column( "height 5", Formula( Column( 4 )[Empty()] ));
wait(0);
dt[5::10, "height"] = 1;
wait(0);
New window(<< type("modal dialog"), Text Box ("just height 1 got updated ... continue"));
dt << Move Selected Columns( {:height}, after( :name ) );
New window(<< type("modal dialog"), Text Box ("no big difference - now let's recalc"));
dt << rerun formulas();
antes después

- El intérprete de la fórmula de columna entiende Columna(4) y Como Columna(4), Columna("altura") y así sucesivamente....
Pero el mecanismo que actualiza las columnas si cambian las de entrada, ¿no? ¿Hay que activar la actualización manualmente?
- Cuando la columna se mueve a otro lugar, el número no se actualiza.
¡Nunca utilizaré números en las referencias de columnas!
Nunca usaré algo como Columna ("altura")
Dato curioso:
Al editor de fórmulas tampoco le gusta:

Re: Uso de objetos numéricos en una ecuación de columnaSupongo que debería haber descrito mi oscuro propósito. Tengo una mesa que no se decide entre ser alta o ancha. Las columnas 1 y 2, filas 1 a 8, son altas, y las columnas 1 a 11 se convierten en anchas después de la fila 12. Este script es el primer paso para darle sentido a la mesa.
antes después

Realizo una serie de pasos más para procesar los datos, pero esta fue la parte complicada.