Gibt es eine Möglichkeit, eine Benutzerfunktion mit verschiedenen Zeilenfiltern aufzurufen?Es tut uns leid. Ich weiß nicht, wie ich es am besten im Titel beschreiben soll, aber ich werde versuchen zu veranschaulichen, was ich derzeit habe und was ich erreichen wollte:
Was ich habe:
Ich habe also diese Funktion, die für Col Min, Max und Mean berechnet
col_stats = Function( { COL_NAME }, {},
curr_dt = Cuurent Data Table();
min_val = Col Min ( curr_dt:Eval(COL_NAME));
max_val = Col Max ( curr_dt:Eval(COL_NAME));
mean_val = Col Mean ( curr_dt:Eval(COL_NAME));
Eval List({min_val, max_val, mean_val});
);Was ich erreichen möchte:
Ich möchte in der Lage sein, die Funktion col_stat aufzurufen und die Daten mithilfe der Kombination einer bestimmten Liste oder Listen zu filtern.
Die Anzahl der Listen kann sich je nach Benutzer ändern. Wählen Sie im folgenden Beispiel temp und vcc aus (Benutzer kann Häufigkeit usw. hinzufügen).
temperature = {-40, 0, 25, 100};<BR />vcc = {1.2, 1.26, 1.32};Ich möchte in der Lage sein, den Min Max Mean mit der Funktion col_stat für zu erhalten
-40 und 1,20 V.
-40 und 1,26 V.
und so weiter.
Wenn die Anzahl der Listen bekannt ist, weiß ich, dass ich eine doppelte for-Schleife ausführen kann, um die Kombination zweier Listen zu durchlaufen, aber ich möchte sie so erweitern, dass der Benutzer weitere Listen hinzufügen kann
Hoffe ich habe es gut erklärt.
SkriptingBetreff: Gibt es eine Möglichkeit, eine Benutzerfunktion mit verschiedenen Zeilenfiltern aufzurufen?Ich denke darüber nach, dass Sie eine ziemlich einfache Änderung an Ihrer Funktion vornehmen müssen, damit sie nur für Zeilen funktioniert, die in Ihrer Datentabelle ausgewählt sind. Die Show () mit dem Aufruf Ihrer Funktion setzt voraus, dass die Datentabelle Big Class geöffnet ist.
col_stats = Function( {dt, COL_NAME},
{defaultlocal},
min_val = Col Min( If( Selected( Row State( Row() ) ), column(dt, COL_NAME ), . ) );
max_val = Col Max( If( Selected( Row State( Row() ) ), column(dt, COL_NAME ), . ) );
mean_val = Col Mean( If( Selected( Row State( Row() ) ), column(dt, COL_NAME ), . ) );
Return( Eval List( {min_val, max_val, mean_val} ) );
);
show(col_stats(dt,"height"));
Wenn Sie Ihre Berechnungen nur für die ausgewählten Zeilen durchführen, können Sie die Funktionalität von verwenden
dt << Wählen Sie Wo ()
um zu definieren, welche Kombinationen von Elementen Sie möchten, und dann die Funktion aufzurufen und die Ergebnisse zu erhalten.
Und Sie müssen nicht alles in einem einzigen Select Where erzwingen. Wenn Sie sich die Definition von Select Where ansehen, werden Sie feststellen, dass Sie Ihre endgültige Gesamtauswahl dynamisch erstellen können, indem Sie mehrere Select Where () -Klauseln übergeben und angeben, ob der Vertrag aus der aktuellen Auswahl erweitert werden soll Wenn derzeit alle Zeilen mit -40 ausgewählt sind, können Sie JMP anweisen, die weitere Qualifikation "nur die vcc von 1,20" hinzuzufügen.
Betreff: Gibt es eine Möglichkeit, eine Benutzerfunktion mit verschiedenen Zeilenfiltern aufzurufen?Verwenden Sie eine verschachtelte Schleife für: {{Temperaturen}, {vccs}}?
Betreff: Gibt es eine Möglichkeit, eine Benutzerfunktion mit verschiedenen Zeilenfiltern aufzurufen?
Wenn Sie eine Where-Klausel verwenden, ist es möglicherweise etwas schneller, nur die Werte für die interessierenden Zeilen abzurufen und die Matrixmethoden zu verwenden:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
col_stats = Function( {dt, rows, COL_NAME},
{defaultlocal},
vals = column(dt, COL_NAME )[rows];
min_val = Min( vals );
max_val = Max( vals );
mean_val = Mean( vals );
Return( Eval List( {min_val, max_val, mean_val} ) );
);
show(col_stats(dt, dt<<GET rows="" where=""></GET>
Dies tauscht ein wenig Speicher gegen Geschwindigkeit aus - Sie haben zwei zusätzliche Vektoren, aber es sind keine Schleifen oder Bedingungen in der JSL-Auswertung erforderlich.
Betreff: Gibt es eine Möglichkeit, eine Benutzerfunktion mit verschiedenen Zeilenfiltern aufzurufen?Um eine verschachtelte for-Schleife zu erstellen, müssten zwei for-Schleifen für die beiden Listen hart codiert werden, oder?
Ich möchte das vermeiden, denn wenn der Benutzer mehr Filterlisten wie freq = {10, 20, 30} hinzufügt, würde das nicht funktionieren, oder?
Wenn ich temp, wafer, vcc in die Liste "By" einfüge, würde es die Verteilung aller Kombinationen von temp, wafer & vcc erzeugen. Aber ich mag es, mit meiner eigenen Funktion zu arbeiten.