Gibt es eine Möglichkeit, in einer Formel verwendete Spalten zu extrahieren?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo Leute-
Ich versuche, auf meiner Plattform eine neue Schaltfläche zu erstellen, die ausgewählte Spalten aus einer schrittweisen Analyse extrahiert und dann univariate Verteilungen jeder Auswahl aufbaut. Die Einschränkung besteht darin, dass die Extraktion der ausgewählten Spalten und der Aufbau der Verteilung auf die spezifischen Spaltennamen in der Liste beschränkt sind. Ich möchte in der Lage sein, in die Spalte einzutauchen, um zu überprüfen, ob es sich um eine Formel handelt, alle verwendeten Spalten zu extrahieren, wenn dies der Fall ist, und dann umzudrehen und die zusätzlichen Spalten schrittweise in die Liste der ausgewählten Spalten aufzunehmen.
Genauer gesagt: Kann ich Spalten aus einer Formel extrahieren? Die Verwendung des Teils „:“ scheint keine komplexen Namen zu erfassen, und der Index bezieht sich nur auf das Erfassen der gesamten Formel.
Ein Beispiel wäre, meine Spalte „Volume“ in einer Liste zu haben:
{:Volumen}
Column("Volume")<
:Höhe Breite Länge
Ich möchte mit einer Liste von Folgendem enden:
{:Höhe, :Breite, :Länge, :Volumen}
Dies ist ein einfaches Formelbeispiel, es gäbe auch andere Versionen/Typen mit einfachen oder komplexen Namen ...
Danke,
Andrew Parker
Betreff: Gibt es eine Möglichkeit, in einer Formel verwendete Spalten zu extrahieren?Ich denke, das ist eine vernünftige Umschreibung des Craige@JMP-Eintrags oben, Andrew.
Beachten Sie jedoch, dass Ihr Beispiel direkt oben zeigt, dass Sie nur die einzelnen Elemente in der Liste behalten müssen (daher kommt „W“ nur einmal vor). Sie könnten diese Logik in Craiges Funktion einfügen oder einfach die Liste manipulieren, die seine Funktion zurückgibt.
Betreff: Gibt es eine Möglichkeit, in einer Formel verwendete Spalten zu extrahieren?Danke! Das scheint definitiv das zu sein, was ich brauche, um mein Programm abzuschließen.
Um zu überprüfen, ob ich die Formel verstanden habe, stelle ich mir mit dem Formel-Builder vor, was passiert:

Es schaut auf das Hauptfeld und fragt: „Wie lautet die Formel?“ und „Wie viele Stücke werden benötigt?“ zu dem es sich jedes Stück ansieht und die Frage wiederholt, bis es auf ein Kästchen trifft, das nur Blätter darin enthält, und die Zeichenfolge für alle Blätter zurückgibt, die ein Spaltenname sind. Sobald der kleinste Blattkasten erreicht ist, beginnt er, sich zurückzuziehen und sich die Knoten/Blätter anzusehen, die er auf seinem Weg zum ersten Blattkasten nicht überprüft hat ...
Die Beschreibung ist nicht besonders eloquent, aber klingt das richtig?
Betreff: Gibt es eine Möglichkeit, in einer Formel verwendete Spalten zu extrahieren?Schöner Code! Vielen Dank.
Betreff: Gibt es eine Möglichkeit, in einer Formel verwendete Spalten zu extrahieren?Ian – rekursive Version Hier
Betreff: Gibt es eine Möglichkeit, in einer Formel verwendete Spalten zu extrahieren?Der beste Weg, dies zu tun, besteht darin, den Formelausdruck rekursiv in einen Baum zu tokenisieren und dann die Blattknoten nach Spaltenverweisen zu durchsuchen. Dies ist in JSL mit den bereitgestellten Ausdrucksmanipulationsprimitiven durchaus möglich (sehen Sie sich den Abschnitt „Listen und Ausdrücke“ im JMP-Skripthandbuch an und achten Sie dabei auf die Funktionen „Head()“, „NRg()“ und „Arg()“. ). Möglicherweise müssen Sie jedoch ein Informatikbuch hervorholen, um diese Methode zu programmieren.
Alternativ bietet der folgende Code eine umständliche Möglichkeit, JMP dazu zu bringen, die Arbeit für Sie zu erledigen (mithilfe des Profilers):
NamesDefaultToHere ( 1 ) ;
dt = Neuer Tisch ( „Spalten in Formel abrufen“ ,
Zeilen hinzufügen ( 20 ) ,
Neue Spalte ( "H" ,
Numerisch ,
„Kontinuierlich“ ,
Format ( "Am besten" , 12 ) ,
Formel ( Zufällige Uniform () )
) ,
Neue Spalte ( „W“ ,
Numerisch ,
„Kontinuierlich“ ,
Format ( "Am besten" , 12 ) ,
Formel ( Zufällige Uniform () )
) ,
Neue Spalte ( "D" ,
Numerisch ,
„Kontinuierlich“ ,
Format ( "Am besten" , 12 ) ,
Formel ( Zufällige Uniform () )
) ,
Neue Spalte ( „V“ ,
Numerisch ,
„Kontinuierlich“ ,
Format ( "Am besten" , 12 ) ,
Formel ( ( : W * : H * : D ) / 10 )
)
) ;
// Den Profiler unsichtbar starten
P = dt << Profiler ( Y ( : V ) , Expandieren , Unsichtbar ) ;
// Holen Sie sich die Rastertabelle
P << OutputGridTable ;
// Holen Sie sich die Spalten in der Rastertabelle in eine Liste
Spalten = Datentabelle ( NTable ()) << getColumnNames ( „Zeichenfolge“ ) ;
// Aufräumen
P << Fenster schließen ;
Schließen ( Datentabelle ( NTable ()) , NeinSpeichern ) ;