Analysieren Sie Informationen aus dem Modelltabellenskript<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo, ich versuche eine robuste Methode zu finden, um die Modellbegriffe aus dem Modellskript zu entfernen. Dies ist also ein Beispielskript (automatisch mit benutzerdefiniertem DOE erstellt):
Fit Modell (
Y (: Dicke entfernt),
Auswirkungen(
: Name ("Gastyp {1 & 1-3}"),
: Name ("Gastyp {1-3}"),
:Temperatur,
: Plasma-Leistung,
: Plasmazeit,
: Ätzgasstrom,
: Reaktordruck,
: Name ("Gastyp {1 & 2-3}") *: Temperatur,
: Name ("Gastyp {1 & 2-3}") *: Plasmastrom,
: Name ("Gastyp {1 & 2-3}") *: Plasmazeit,
: Name ("Gasart {1 & 2-3}") *: Ätzgasfluss,
: Name ("Gasart {1 & 2-3}") *: Reaktordruck,
: Temperatur *: Reaktordruck,
: Plasma Power *: Plasmazeit,
: Plasma Power *: Ätzgasfluss,
: Temperatur *: Temperatur
)
Persönlichkeit ("Standard Least Squares"),
Betonung ("Effect Leverage")
)
Ich bin daran interessiert, eine Liste der Faktoren zu erhalten, die im Abschnitt effekte () enthalten sind. Und die Liste der Modellbegriffe im selben Teil der Zeichenfolge. Das Problem ist, dass die Gesamtlänge der Zeichenfolge variieren kann, die Anzahl der Klammern variieren kann und die Reihenfolge von Y (), Effects (), Personality (), Emphasis () sich bewegen kann.
Dinge, an die es dachte, wissen aber nicht, wie es geht:
- Verwenden Sie Wörter, um die Zeichenfolge in "," aufzuteilen, jedoch nur auf der höchsten Ebene. Suchen Sie nun das Wort, das mit Effekten beginnt, und teilen Sie es dann erneut in "," auf. Diejenigen ohne "*" sind die Faktoren, das Ganze ist die Liste der Modellbegriffe.
- Suchen Sie nach "Effects" und beginnen Sie mit dem Zählen. Jedes "(" ist +1 alle ")" ist -1, und wenn Sie 0 erreichen, war dies die letzte schließende Klammer, die zu Effects gehört.
Es scheint mir jedoch, dass es einen einfacheren Weg geben sollte, das Skript zu analysieren, da dies die Skriptsprache ist.
Re: Analysiert Informationen aus dem Modelltabellenskript Hier ist ein Weg, ich von Ians zweitem Beispiel nspiriert, um zu bekommen die Auswirkungen, wenn Anzahl und Reihenfolge der Modellargumente unbekannt sind.
fm_expr = Ausdruck (
Modell anpassen (
Y ( : Dicke entfernt ) .
Auswirkungen (
: Name ( "Gastyp {1 & 1-3}" ) .
: Name ( "Gasart {1-3}" ) .
: Temperatur .
: Plasma-Leistung .
: Plasmazeit .
: Ätzgasfluss .
: Reaktordruck .
: Name ( "Gastyp {1 & 2-3}" ) * : Temperatur .
: Name ( "Gastyp {1 & 2-3}" ) * : Plasma-Leistung .
: Name ( "Gastyp {1 & 2-3}" ) * : Plasmazeit .
: Name ( "Gastyp {1 & 2-3}" ) * : Ätzgasfluss .
: Name ( "Gastyp {1 & 2-3}" ) * : Reaktordruck .
: Temperatur * : Reaktordruck .
: Plasma-Leistung * : Plasmazeit .
: Plasma-Leistung * : Ätzgasfluss .
: Temperatur * : Temperatur
) .
Persönlichkeit ( "Standard-Kleinstquadrate" ) .
Betonung ( "Effekt-Hebel" )
)
) ;
// Liste der Effekte erstellen
ich = 1 ;
Während ( ! Ist leer ( arg_i = Arg ( fm_expr . ich )) .
Ob ( Beginnt mit ( Verkohlen ( Name Ausdruck ( arg_i )) . "Auswirkungen" ) .
n = N Arg ( arg_i ) ;
Auswirkungen = Wiederholen (
k = 0 ;
{ k ++ ; Arg ( arg_i . k )} ,,
n
) ;
Brechen () ;
.
ich ++
)
) ;
Drucken ( Auswirkungen ) ;
Re: Analysiert Informationen aus dem ModelltabellenskriptVielen Dank!
Re: Analysiert Informationen aus dem ModelltabellenskriptIhre Frage ist nicht vollständig beantwortet, aber JMP-Skripts sind eigentlich Ausdrücke und können als solche manipuliert werden (suchen Sie nach 'Head ()', 'Arg ()' und 'NArg {}' im Scripting Index oder Guide). Zum Beispiel:
fm = Ausdruck (
Modell anpassen (
Y ( : SILICA ) .
Auswirkungen (
: ABRASION & RS .
: MODUL & RS .
: ELONG & RS .
: HÄRTE & RS .
: ABRASION * : ABRASION .
: ABRASION * : MODUL .
: MODUL * : MODUL .
: ABRASION * : ELONG .
: MODUL * : ELONG .
: ELONG * : ELONG .
: ABRASION * : HÄRTE .
: MODUL * : HÄRTE .
: ELONG * : HÄRTE .
: HÄRTE * : HÄRTE
) .
Persönlichkeit ( "Standard-Kleinstquadrate" ) .
Betonung ( "Effekt-Screening" ) .
Lauf
)
) ;
Auswirkungen = Arg ( fm . 2 ) ;
zum ( ich = 1 . ich <= NArg ( Auswirkungen ) . ich ++ Drucken ( Arg ( Auswirkungen . ich ))) ;
Andererseits können sie auch als Textzeichenfolgen behandelt werden. In diesem Fall erfahren Sie mehr über 'RegEx ()' für den allgemeinsten und leistungsfähigsten Ansatz.
Das Einfügen von Code mit Formatierung scheint ein wenig Betriebssystem und Browser zu erfordern - ich verwende Safari auf einem Mac.
Re: Analysiert Informationen aus dem ModelltabellenskriptHallo Ian, danke für deine Antwort, es löst mein Problem:
NamesDefaultToHere (1);
dt = aktuelle Datentabelle ();
fm = dt << Skript ausführen ("Model");
try (fm = fm << run); // Weil diese Skripts normalerweise den Befehl Ausführen nicht enthalten.
effectNames = fm << getEffectNames;
Report (fm) << closeWindow;
mainEffectNames = {};
for (i = 1, i <= NItems (effectNames), i ++, if (NItems (Wörter (effectNames , "*")) == 1, InsertInto (mainEffectNames, effectNames) )));
Drucken (effectNames, mainEffectNames);
Aber für mein Lernen: Gibt es eine Möglichkeit, die Informationen aus der Zeichenfolge zu analysieren, in der Sie nach einer schließenden Klammer suchen können, die zu einer bestimmten öffnenden Klammer gehört, und den String zwischen diesen Klammern abrufen?
Und wie formatiert man Skripte in diesem Forum so, dass sie wie Skripte aussehen?
Re: Analysiert Informationen aus dem ModelltabellenskriptWenn Sie nichts dagegen haben, das Skript auszuführen, könnten Sie Folgendes tun:
NamesDefaultToHere ( 1 ) ;
dt = Öffnen ( "$ SAMPLE_DATA / Tiretread.jmp" ) ;
fm = dt << Modell anpassen (
Y ( : SILICA ) .
Auswirkungen (
: ABRASION & RS .
: MODUL & RS .
: ELONG & RS .
: HÄRTE & RS .
: ABRASION * : ABRASION .
: ABRASION * : MODUL .
: MODUL * : MODUL .
: ABRASION * : ELONG .
: MODUL * : ELONG .
: ELONG * : ELONG .
: ABRASION * : HÄRTE .
: MODUL * : HÄRTE .
: ELONG * : HÄRTE .
: HÄRTE * : HÄRTE
) .
Persönlichkeit ( "Standard-Kleinstquadrate" ) .
Betonung ( "Effekt-Screening" ) .
Lauf
) ;
effectNames = fm << getEffectNames ;
Bericht ( fm ) << Fenster schließen ;
mainEffectNames = {} ;
zum ( ich = 1 . ich <= NItems ( effectNames ) . ich ++ ob ( NItems ( Wörter ( effectNames [ ich ] . "*" )) == 1 . Einfügen in ( mainEffectNames . effectNames [ ich ]) )) ;
Drucken ( effectNames . mainEffectNames ) ;
Die 'getEffectNames'-Nachricht liefert einen einfacheren Ausdruck, aber Sie müssen ihn trotzdem analysieren, um nur die Haupteffekte zu erhalten. Es gibt andere indirekte Methoden, um die Haupteffekte aus dem FitModel-Bericht zu erhalten.
Sie sagten jedoch "automatisch aus benutzerdefiniertem DOE erstellt". In diesem Fall könnte es einfacher sein, die Liste der Faktoren von dort aus abzurufen.