¿Hay alguna manera de llamar a una función de usuario con diferentes filtros de fila?Lo siento. No sé cómo describirlo mejor en el título, pero intentaré ilustrar lo que tengo actualmente y lo que quería lograr:
Lo que tengo:
Entonces tengo esta función que calcula para Col Min, Max y Mean
col_stats = Function( { COL_NAME }, {},
curr_dt = Cuurent Data Table();
min_val = Col Min ( curr_dt:Eval(COL_NAME));
max_val = Col Max ( curr_dt:Eval(COL_NAME));
mean_val = Col Mean ( curr_dt:Eval(COL_NAME));
Eval List({min_val, max_val, mean_val});
);Lo que quiero lograr:
Quiero poder llamar a la función col_stat, filtrando los datos usando la combinación de una lista o listas determinadas.
El número de listas puede cambiar según el usuario; para el ejemplo a continuación, el usuario selecciona temp y vcc (el usuario puede agregar frecuencia, etc.)
temperature = {-40, 0, 25, 100};<BR />vcc = {1.2, 1.26, 1.32};Quiero poder obtener la media mínima máxima usando la función col_stat para
-40 y 1.20V
-40 y 1.26V
y así.
Si se conoce el número de lista, sé que puedo hacer un bucle doble para iterar a través de la combinación de dos listas, pero quiero expandirlo de tal manera que el usuario pueda agregar más listas
Espero haberlo explicado bien.
ScriptingRe: ¿Hay alguna manera de llamar a una función de usuario con diferentes filtros de fila?Pienso en esto, es que necesita hacer un cambio bastante simple en su función para que funcione solo en las filas que están seleccionadas en su tabla de datos. El Show () con la llamada a su función está asumiendo que la tabla de datos Big Class está abierta.
col_stats = Function( {dt, COL_NAME},
{defaultlocal},
min_val = Col Min( If( Selected( Row State( Row() ) ), column(dt, COL_NAME ), . ) );
max_val = Col Max( If( Selected( Row State( Row() ) ), column(dt, COL_NAME ), . ) );
mean_val = Col Mean( If( Selected( Row State( Row() ) ), column(dt, COL_NAME ), . ) );
Return( Eval List( {min_val, max_val, mean_val} ) );
);
show(col_stats(dt,"height"));
Al hacer sus cálculos solo en las filas seleccionadas, puede usar la funcionalidad de
dt << Seleccione Dónde ()
para definir cualquier combinación de elementos que desee, y luego llamar a la función y obtener los resultados.
Y no tiene que forzar todo en un solo Seleccione Dónde. Si observa la definición de Select Where, verá que puede construir dinámicamente su selección general final pasando varias cláusulas Select Where (), y especificando si expandir el contrato desde la selección actual. Si todas las filas con -40 están actualmente seleccionadas, puede indicarle a JMP que agregue la calificación adicional de "solo el vcc de 1.20)
Re: ¿Hay alguna manera de llamar a una función de usuario con diferentes filtros de fila?¿Utiliza un bucle anidado para: {{Temperaturas}, {vccs}}?
Re: ¿Hay alguna manera de llamar a una función de usuario con diferentes filtros de fila?
Si está utilizando una cláusula Where, puede que le resulte un poco más rápido obtener los valores de las filas de interés y utilizar los métodos de matriz:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
col_stats = Function( {dt, rows, COL_NAME},
{defaultlocal},
vals = column(dt, COL_NAME )[rows];
min_val = Min( vals );
max_val = Max( vals );
mean_val = Mean( vals );
Return( Eval List( {min_val, max_val, mean_val} ) );
);
show(col_stats(dt, dt<<GET rows="" where=""></GET>
Esto compensa un poco de memoria por la velocidad: tiene dos vectores adicionales, pero no requiere ningún bucle o condicionales en la evaluación JSL.
Re: ¿Hay alguna manera de llamar a una función de usuario con diferentes filtros de fila?Hacer un bucle anidado requeriría codificar de forma forzada dos bucles for para las dos listas, ¿verdad?
Me gustaría evitar eso, porque si el usuario agrega más lista de filtros como freq = {10, 20, 30} entonces eso no funcionaría, ¿verdad?
Me gustaría que funcionara como "By" en Distribución si agrego temp, wafer, vcc en la lista "By", generaría la distribución de todas las combinaciones de temp, wafer y vcc. Pero me gusta que funcione con mi propia función.