Boolesche Logik kann mit JMP-Skript nicht auf Tabellenformeln angewendet werdenHallo,
Ich versuche, ein einfaches Skript auszuführen, das Punkte auswählt und dann ausblendet und ausschließt, deren radialer Abstand vom Mittelpunkt größer als 100 mm ist.
Um das Debuggen zu vereinfachen, habe ich dies in zwei Skripte aufgeteilt: Das erste generiert eine Spalte mit der Formel für den radialen Abstand Radial = (x^2 + y^2)^(1/2) und das zweite wertet diese Formel aus und wählt Zeilen aus und blendet sie aus, bei denen Radial > 100 ist.
Leider funktioniert das nicht. Aus irgendeinem seltsamen Grund funktioniert die Auswertung dieser Formel nur bis zu einem bestimmten Wert. Radial > (alles über 30) wählt alle Zeilen aus.
Ich sehe zwei Lösungen:
1) Schreiben Sie Werte in die Radialspalte, nicht in die Formel selbst. (Werte werden richtig ausgewertet, die Formel nicht). Ich bin nicht sicher, wie das geht.
2) Verstehen und beheben Sie das Problem, sodass die Formel anhand eines Werts größer als 30 ausgewertet werden kann.
Entweder eine Skriptantwort oder eine interaktive Erklärung wären akzeptabel. Ich würde dieses Problem gerne lösen und daraus lernen.
Danke!
Dave
// script for creating the Radial column<BR />dt1 = Current Data Table ();
dt1 << New Column( "Radial", Formula ((X coordinate^2 + Y coordinate^2)^(1/2)));<BR /><BR />// script for evaluating the Radial formula<BR />dt =Current Data Table();<BR />dt << Clear Row States; <BR />dt << Select where(Radial < 100);<BR />dt << hide and exclude;<BR />
Datenzusammenführung und -bereinigungBetreff: Boolesche Logik kann nicht mit jmp-Skript auf Tabellenformel ausgeführt werdenIch schätze ein wenig, aber ich glaube, dass Ihr Problem mit Radial vs. Radial 1 darin besteht, dass Sie Ihre Spaltenvariable nicht richtig festlegen.In deiner Aussage
dt << Select where((Radial 1> 100) | (Radial 1< 30) | (Pits Only > mf));
Sie sollten ein ":" vor die Spaltennamen :Radial 1 und :Pits Only setzen.Der Grund, warum das Skript mit Radial 1 arbeitet, ist, dass es keine Speichervariable namens Radial 1 gibt, mit der JMP verwechselt werden kann.Ich gehe davon aus, dass Sie irgendwann bei Ihren Codierungsversuchen versehentlich eine Speichervariable von Radial erstellt haben, also als Sie angegeben haben
dt << Select where((Radial> 100) | (Radial< 30) | (Pits Only > mf));
JMP ersetzte den Wert für Radial durch den Wert der Speichervariablen, nicht durch den Wert der Spalte Radial.
Betreff: Boolesche Logik kann nicht mit jmp-Skript auf Tabellenformel ausgeführt werdenDanke für die Antwort Jeff.
Das Einfügen der letzten Zeile Ihres Skripts in meins hat das Problem nicht gelöst. Ich konnte jedoch eine Lösung finden, indem ich den Namen der Spalte in "Radial 1" änderte und am Ende eine Zeile mit Eval-Formel hinzufügte. Nicht sicher, warum das funktioniert. Die Datentabelle besteht aus etwa 1.300 Zeilen mit 15 Spalten, jede Zahl hat eine Breite von 10 bis 12.
Die folgenden zwei Skripte funktionieren. Ich füge sie vollständig ein. Die anderen Zeilen bewerten die Grubentiefe und -verteilung.
Irgendeine Idee, warum die Änderungen funktionierten? Ich war den größten Teil des Tages damit beschäftigt.
Skript 1: Erstellen Sie die Spalten „Pits Only“ und „Radial 1“.
dt1 = Current Data Table ();
dt1 << Clear Row States;
dt1 << New Column( "Pits Only", Formula (If( :Name( "Height (mm)" ) <= 0, :Name( "Height (mm)"), 0 )) );
dt1 << New Column( "Radial 1", Formula ((X coordinate^2 + Y coordinate^2)^(1/2)));
dt1 << Eval Formula;
obj = dt1 << Distribution( Column( :Pits Only), Horizontal Layout( 1 ), Count Axis);
Skript 2: Zeilen ausblenden und ausschließen mit Pits Only > 10 oder Radial 1 > 100 oder Radial 1 < 30
dt =Current Data Table();
dt << Clear Row States;
win = New Window( "Feature Depth" , <<MODAL> 100) | (Radial 1< 30) | (Pits Only > mf));
dt << hide and exclude;</MODAL>
Betreff: Boolesche Logik kann nicht mit jmp-Skript auf Tabellenformel ausgeführt werdenIch fürchte, ich habe Probleme, hier ein Problem zu reproduzieren. Hier ist das Skript, mit dem ich getestet habe.
dt1 = New Table( "Community 416651 Select Where",
Add Rows( 1000000 ),
New Column( "x coordinate",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Sequence( 5, 100, 5 ) ),
Set Selected
),
New Column( "y coordinate",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Sequence( 5, 100, 5, 20 ) ),
)
);
dt1 << New Column( "Radial",
Formula(
(X coordinate ^ 2 + Y coordinate ^ 2) ^ (1 / 2)
)
);
dt1 << Select where( Radial < 60 );
Wir brauchen also etwas mehr Details zu Ihrem Skript und Ihrer Datentabelle.
Wie groß ist Ihre Datentabelle? Was macht dein Skript sonst noch?
Betreff: Boolesche Logik kann nicht mit jmp-Skript auf Tabellenformel ausgeführt werdenSkript zum Erstellen der radialen Spalte
dt1 = Current Data Table ();
dt1 << Clear Row States;
dt1 << New Column( "Radial", Formula ((X coordinate^2 + Y coordinate^2)^(1/2)));
Skript zum Auswerten der Radialformel
dt =Current Data Table();
dt << Clear Row States;
dt << Select where(Radial < 100);
dt << hide and exclude;