uso de parámetros en 'seleccionar dónde' y 'selección de nombre en la columna'Hola,
Necesito tomar una tabla de datos formada por dos columnas, X e Y, seleccionar varias filas de la tabla de datos y nombrar la selección. Esto corresponde a seleccionar veinte rectángulos en el espacio cartesiano xy y nombrarlos con un número (del 1 al 20) (estoy trabajando con una imagen).
Escribí un guión pero no funciona. Creo que necesito resolver dos problemas: 1) ¿cómo puedo usar un parámetro, ver X1, X2, .., en el argumento de 'seleccionar dónde'? 2) ¿Cómo puedo usar un parámetro, ver n_patch, en el argumento de 'selección de nombre en la columna'?
Muchas gracias.
Aquí está el guión:
dt = Current Data Table();
X0 = 2332;
Y0 = 558;
n_patch = 0;
delta_x = 100;
delta_y = 100;
dist_y = 488;
dist_x = 656;
L_x = 500;
L_y = 500;
For( n_x = 1, n_x <= 4, n_x++,
For( n_y = 1, n_y <= 5, n_y++,
Xc = X0 - (n_x - 1) * (dist_x) + L_x / 2;
Yc = Y0 + (n_y - 1) * (dist_y) + L_y / 2;
n_patch = n_patch + 1;
X1 = Xc - delta_x;
X2 = Xc + delta_x;
Y1 = Yc - delta_y;
Y2 = Yc + delta_y;
dt << Row Selection(
Select where( (:X >= X1 & :X <= X2) & (Y >= Y1 & Y <= Y2) )
);
dt << Name Selection in Column(
Column Name( "Patch#" ),
Selected( ("n_patch") ),
Unselected( "" )
);
)
);
Tabla de datosScriptingRe: uso de parámetros en 'seleccionar dónde' y 'selección de nombre en columna'Hola @MFVIT ,
Debe asegurarse de que los valores de X1 e Y1 se evalúen en su secuencia de comandos, en lugar de buscar algo en la tabla de datos.Este problema se ilustra en Inserte una expresión en otra usando Eval Insert, Eval Expr, Parse y Substitute . Puede asegurarse de que esto suceda utilizando Eval (Eval Expr ()). Aquí hay un ejemplo usando su código con una tabla de datos de ejemplo.
Names default to here(1);
dt = New Table( "Example Data",
Add Rows( 10000 ),
New Column( "X", Numeric, "Continuous", Format( "Best", 12 ),
Formula( Random Uniform( 0, 10000 ) ) ),
New Column( "Y", Numeric, "Continuous", Format( "Best", 12 ),
Formula( Random Uniform( 0, 10000 ) ) )
);
X0 = 2332;
Y0 = 558;
n_patch = 0;
delta_x = 100;
delta_y = 100;
dist_y = 488;
dist_x = 656;
L_x = 500;
L_y = 500;
For( n_x = 1, n_x <= 4, n_x++,
For( n_y = 1, n_y <= 5, n_y++,
Xc = X0 - (n_x - 1) * (dist_x) + L_x / 2;
Yc = Y0 + (n_y - 1) * (dist_y) + L_y / 2;
n_patch = n_patch + 1;
X1 = Xc - delta_x;
X2 = Xc + delta_x;
Y1 = Yc - delta_y;
Y2 = Yc + delta_y;
Eval( Eval Expr(
dt << Row Selection(
Select where( (:X >= Expr( X1 ) & :X <= Expr( X2 )) & (:Y >= Expr( Y1 ) & :Y <= Expr( Y2 ) ) )
);
) );
dt << run formulas;
dt << Name Selection in Column(
Column Name( "Patch#" || char( n_patch ) ),
Selected( "n_patch = " || char( n_patch ) ),
Unselected( "" )
);
)
);Re: uso de parámetros en 'seleccionar dónde' y 'selección de nombre en columna'Hola, muchas gracias por tu pronta respuesta.
Su código es muy útil para mí, creo que estoy en el camino correcto. Sin embargo, todavía hay algo que no funciona.
Intenté ejecutar su código y vi que agrega muchas columnas con los nombres 'Patch # 1', 'Patch # 2', etc., así que cambié la línea
Column Name( "Patch#" || char( n_patch ) )
con
Column Name( "Patch#")
porque solo quiero una columna con el nombre Patch #.
Pero el código no selecciona lo que espero que sea seleccionado. Selecciona solo los parches 5, 10, 15 y 20 y no los otros parches y, además, las filas seleccionadas no se corresponden con los parches.
Por lo tanto, no estoy seguro de que el comando de selección esté funcionando correctamente.
Muchas gracias por cualquier ayuda.
Marcello.
Re: uso de parámetros en 'seleccionar dónde' y 'selección de nombre en columna'Es posible que esté usando una versión un poco más antigua de JMP, por lo que no estoy seguro de si funcionarán para usted (sin usar Selección de fila o Selección de nombre en la columna).
Puede obtener filas de interés con << obtener filas donde y luego establecer valores con columna () [filas]
dt << New Column("Patch#", Character);
For( n_x = 1, n_x <= 4, n_x++,
For( n_y = 1, n_y <= 5, n_y++,
Xc = X0 - (n_x - 1) * (dist_x) + L_x / 2;
Yc = Y0 + (n_y - 1) * (dist_y) + L_y / 2;
n_patch = n_patch + 1;
X1 = Xc - delta_x;
X2 = Xc + delta_x;
Y1 = Yc - delta_y;
Y2 = Yc + delta_y;
wantedRows = dt << get rows where(:X >= X1 & :X <= X2 & :Y >= Y1 & :Y <= Y2);
Column(dt, "Patch#")[wantedRows] = char(n_patch);
)
);