Verwendung von Parametern in „wählen Sie wo“ und „Namensauswahl in Spalte“Hallo,
Ich muss eine Datentabelle nehmen, die aus zwei Spalten, X und Y, besteht, 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 glaube, ich muss zwei Probleme lösen: 1) Wie kann ich einen Parameter, siehe X1, X2, .., im Argument von „select where“ verwenden? 2) Wie kann ich einen Parameter, siehe n_patch, im Argument von „Namensauswahl in Spalte“ verwenden?
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( "" )
);
)
);
Erweiterte statistische ModellierungAutomatisierung und SkripterstellungVersuchsplanungMassenanpassungBetreff: Verwendung von Parametern in „Wo auswählen“ und „Namensauswahl in Spalte“Vielen Dank. Der Code ist sehr kompakt und funktioniert.
Betreff: Verwendung von Parametern in „Wo auswählen“ 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 wird (keine Verwendung der Zeilenauswahl oder Namensauswahl in der Spalte).
Sie können die gewünschten Zeilen mit << get rows where abrufen und dann mit Column()[rows] Werte 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);
)
);Betreff: Verwendung von Parametern in „Wo auswählen“ und „Namensauswahl in Spalte“Hallo, vielen Dank für Ihre prompte Antwort.
Ihr Code ist für mich sehr nützlich, ich denke, ich bin auf dem richtigen Weg. Es gibt jedoch immer noch etwas, das nicht funktioniert.
Ich habe versucht, Ihren Code auszuführen und habe festgestellt, dass er viele Spalten mit den Namen „Patch#1“, „Patch#2“ usw. hinzufügt. Deshalb 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# möchte.
Der Code wählt jedoch nicht das aus, was ich erwarte. Es wählt nur Patch 5, 10, 15 und 20 und nicht die anderen Patches aus und außerdem entsprechen die ausgewählten Zeilen nicht den Patches.
Daher bin ich nicht sicher, ob der Auswahlbefehl ordnungsgemäß funktioniert.
Vielen Dank für jede Hilfe.
Marcello.
Betreff: Verwendung von Parametern in „Wo auswählen“ 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 wird in veranschaulicht Fügen Sie einen Ausdruck in einen anderen ein, indem Sie Eval Insert, Eval Expr, Parse und Substitute verwenden . 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( "" )
);
)
);