utilisation de paramètres dans «sélectionner où» et «sélection de nom dans la colonne»Bonjour,
Je dois prendre une table de données composée de deux colonnes, X et Y, sélectionner plusieurs lignes de la table de données et nommer la sélection. Cela correspond à sélectionner vingt rectangles dans l'espace cartésien xy et à les nommer avec un nombre (de 1 à 20) (je travaille avec une image).
J'ai écrit un script mais cela ne fonctionne pas. Je pense que j'ai besoin de résoudre deux problèmes: 1) comment puis-je utiliser un paramètre, voir X1, X2, .., dans l'argument de «sélectionner où»? 2) comment puis-je utiliser un paramètre, voir n_patch, dans l'argument de 'sélection de nom dans la colonne'?
Merci beaucoup.
Voici le script:
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( "" )
);
)
);
Tableau de donnéesScriptingRe: utilisation des paramètres dans «sélectionner où» et «sélection de nom dans la colonne»salut @MFVIT ,
Vous devez vous assurer que les valeurs de X1 et Y1 sont évaluées dans votre script, plutôt que de rechercher quelque chose dans la table de données elle-même.Ce problème est illustré dans Insérez une expression dans une autre en utilisant Eval Insert, Eval Expr, Parse et Substitute . Vous pouvez vous assurer que cela se produit en utilisant Eval (Eval Expr ()). Voici un exemple utilisant votre code avec un exemple de table de données.
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: utilisation des paramètres dans «sélectionner où» et «sélection de nom dans la colonne»Bonjour, merci beaucoup pour votre réponse rapide.
Votre code m'est très utile, je pense que je suis sur la bonne voie. Cependant, il y a toujours quelque chose qui ne fonctionne pas.
J'ai essayé d'exécuter votre code et j'ai vu qu'il ajoute de nombreuses colonnes avec les noms 'Patch # 1', 'Patch # 2', etc. donc j'ai changé la ligne
Column Name( "Patch#" || char( n_patch ) )
avec
Column Name( "Patch#")
parce que je veux juste une colonne avec le nom Patch #.
Mais le code ne sélectionne pas ce que j'attends d'être sélectionné. Il ne sélectionne que les patch5, 10, 15 et 20 et pas les autres patchs et de plus les lignes sélectionnées ne correspondent pas aux patchs.
Donc, je ne suis pas sûr que la commande de sélection fonctionne correctement.
Un grand merci pour toute aide.
Marcello.
Re: utilisation des paramètres dans «sélectionner où» et «sélection de nom dans la colonne»Vous utilisez peut-être une version un peu plus ancienne de JMP, donc je ne suis pas sûr que cela fonctionnera pour vous (sans utiliser la sélection de ligne ou la sélection de nom dans la colonne).
Vous pouvez obtenir des lignes d'intérêt avec << obtenir des lignes où, puis définir des valeurs avec column () [lignes]
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);
)
);