Hallo JMP-Community, ich bin ein absoluter Neuling bei jmp/jsl (habe buchstäblich erst diese Woche angefangen). Ich habe ein Skript, das auswählen soll, wo bestimmte Werte in einer Zeile kleiner als 3 sind, und diese Zeilen dann löschen soll. Das ist das Skript, das ich dazu machen muss:
dt << select where( :Residual 1 <= 3 );
dt << delete rows;
Der Code wählt die gewünschten Zeilen korrekt aus, aber beim Löschen der Zeilen „aktualisieren“ sie sich selbst (ich habe ein neuronales Netzwerkmodell in die Zeilen davor geschrieben ... siehe Code unten).
// 1. Creates X1 column, and corresponding Y1 and Ystat columns
Close All( Data Tables, NoSave );
dt = New Table( "SampleRun 3",
Add Rows( 100 ),
New Script(
"Ystat vs. X1",
Graph Builder(
Variables( X( :X1 ), Y( :Ystat ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
)
),
New Column( "X1",
Formula( Random Integer( 50 ) )
),
New Column( "Y1",
Formula( If( :X1 < 25, 2 * :X1, 25 <= :X1 <= 30, 3 * :X1, 4 * :X1 ) )
),
New Column( "Ystat",
Formula( :Y1 )
)
);
// 2. Creates predicted Ystat column, saves formulas into same data table (first iteration)
PredictedYstat = dt << Neural(
Y( :Ystat ),
X( :X1 ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Fit( NTanH( 3 ) )
);
PredictedYStat << Save Profile Formulas;
// 3. Adds residual column
dt << New Column( "Residual 1", Formula( Abs( :Predicted Ystat - :Ystat ) ) );
dt << select where( :Residual 1 >= 3 );
dt << delete rows;
Ich kann diese Zeilen auswählen und in eine neue Tabelle einfügen, aber das ist der letzte Ausweg, da es ineffizient ist. Irgendwelche Vorschläge?
Danke,
Kyle
Das hat funktioniert, danke!
Wenn Sie möchten, dass die Formeln nur einmal ausgewertet werden, besteht eine Möglichkeit darin, die Berechnung zu erzwingen und dann die Formeln zu löschen:
dt << Run Formulas;
Column(dt, "X1") << Delete Formula;
Column(dt, "Y1") << Delete Formula;
Column(dt, "Ystat") << Delete Formula;