Verwendung von Parametern in 'Auswahl wo' und 'Namensauswahl in Spalte'Hallo,
Ich muss eine Datentabelle aus zwei Spalten, X und Y, nehmen, mehrere Zeilen der Datentabelle auswählen und die Auswahl benennen. Dies entspricht der Auswahl von zwanzig Rechtecken im kartesischen xy-Raum und deren Benennung mit einer Zahl (von 1 bis 20) (ich arbeite mit einem Bild).
Ich habe ein Skript geschrieben, aber es funktioniert nicht. Ich denke, ich muss zwei Probleme lösen: 1) Wie kann ich einen Parameter verwenden, siehe X1, X2, .. im Argument 'select where'? 2) Wie kann ich einen Parameter verwenden, siehe n_patch, im Argument 'Namensauswahl in Spalte'?
Vielen Dank.
Hier ist das Skript:
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( "" )
);
)
);
DatentabelleSkriptingBetreff: Verwendung von Parametern in 'Auswahl wo' und 'Namensauswahl in Spalte'Hallo @ MFVIT ,
Sie müssen sicherstellen, dass die Werte von X1 und Y1 in Ihrem Skript ausgewertet werden, anstatt in der Datentabelle selbst nach etwas zu suchen.Dieses Problem ist in dargestellt Fügen Sie einen Ausdruck mit Eval Insert, Eval Expr, Parse und Substitute in einen anderen ein . Sie können sicherstellen, dass dies geschieht, indem Sie Eval (Eval Expr ()) verwenden. Hier ist ein Beispiel für die Verwendung Ihres Codes mit einer Beispieldatentabelle.
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( "" )
);
)
);Betreff: Verwendung von Parametern in 'Auswahl wo' und 'Namensauswahl in Spalte'Hallo, vielen Dank für Ihre schnelle Antwort.
Ihr Code ist sehr nützlich für mich, ich denke, ich bin auf dem richtigen Weg. Es gibt jedoch noch etwas, das nicht funktioniert.
Ich habe versucht, Ihren Code auszuführen, und festgestellt, dass viele Spalten mit den Namen "Patch Nr. 1", "Patch Nr. 2" usw. hinzugefügt werden. Daher habe ich die Zeile geändert
Column Name( "Patch#" || char( n_patch ) )
mit
Column Name( "Patch#")
weil ich nur eine Spalte mit dem Namen Patch # will.
Der Code wählt jedoch nicht aus, was ich erwartet habe. Es werden nur Patch5, 10, 15 und 20 und nicht die anderen Patches ausgewählt, und außerdem entsprechen die ausgewählten Zeilen nicht den Patches.
Ich bin mir also nicht sicher, ob der Auswahlbefehl richtig funktioniert.
Vielen Dank für jede Hilfe.
Marcello.
Betreff: Verwendung von Parametern in 'Auswahl wo' und 'Namensauswahl in Spalte'Möglicherweise verwenden Sie eine etwas ältere Version von JMP, daher bin ich mir nicht sicher, ob diese für Sie funktionieren (ohne Zeilenauswahl oder Namensauswahl in Spalte).
Sie können Zeilen von Interesse mit << Zeilen abrufen, wo und dann Werte mit column () [Zeilen] festlegen.
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);
)
);