utilisation des paramètres dans "sélectionner où" et "sélection de nom dans la colonne"Bonjour,
Je dois prendre un tableau de données composé de deux colonnes, X et Y, sélectionner plusieurs lignes du tableau 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 ça ne marche pas. Je pense que je dois 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 scénario :
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( "" )
);
)
);
Modélisation statistique avancéeAutomatisation et scriptsConception d'expériencesPersonnalisation de masseRe : utilisation des paramètres dans 'sélectionner où' et 'sélection de nom dans la colonne'Merci beaucoup. Le code est très compact et travaillé.
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 les lignes qui vous intéressent avec << obtenir les lignes où, puis définir les valeurs avec column()[rows]
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);
)
);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 encore quelque chose qui ne fonctionne pas.
J'ai essayé d'exécuter votre code et j'ai vu qu'il ajoutait de nombreuses colonnes avec les noms 'Patch#1', 'Patch#2', etc. j'ai donc 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 je m'attends à sélectionner. Il sélectionne uniquement les patch5, 10, 15 et 20 et pas les autres patchs et de plus les lignes sélectionnées ne correspondent pas aux patchs.
Je ne suis donc 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'Salut @MFVIT ,
Vous devez vous assurer que les valeurs de X1 et Y1 sont évaluées dans votre script, plutôt que de chercher quelque chose dans la table de données elle-même.Ce problème est illustré dans Insérez une expression dans une autre à l'aide d'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( "" )
);
)
);