Char () auf einen InteraktionseffektEs fällt mir schwer zu glauben, dass das noch nicht gefragt wurde und die falschen Suchbegriffe suchen muss.
Hintergrund: Ich gehe davon aus, dass ein Benutzer Fit Model ausgeführt und ein interessantes Ergebnis als Skript in der Datentabelle gespeichert hat. Ich habe JSL geschrieben, um das Effects () - Argument aus dem gespeicherten Skript zu extrahieren. Nehmen wir an, wir haben Effekte (: A,: B :,: A *:
.
Ich habe bereits JSL geschrieben, das dieses Ergebnis liefert (solange ich NICHT Transform Column () in der Liste der Effekte des Modells verwende - das würde eine ganze neue Dose Würmer erzeugen):
testList = {:A, :B, :A*:B};Meine aktuelle Aufgabe: Ich möchte JSL schreiben, damit mein Benutzer einen dieser drei Effekte auswählen kann.
Aktueller Stand: Was ich bisher gemacht habe, ist folgendes:
win = New Window( "Test", Panel Box( "Choose an Effect", Radio Box( testList ) ) );
Wenn ich das starte, bekomme ich eine Radio Box mit den Effekten "A", "B" und "Multiplizieren". Es ist klar, dass die Display-Box den Kopf () vom dritten Effekt zieht, anstatt einfach "A * B" anzuzeigen.
Mögliche Lösung: Ich denke, ich könnte das Problem beheben, indem Sie eine Schleife schreiben, um Head (testList [i]) == "Multiply ()" zu prüfen. Wenn dies der Fall ist, müssen Sie eine andere Schleife schreiben, um jedes der Arg (testList [i]) zu extrahieren. j), konvertieren Sie diese in Zeichen, stellen Sie sie in eine andere Liste und Concat Items () mit einem Trennzeichen "*".
Frage: Gibt es eine direktere Route als diese, die mir eine Radio-Box mit den Effekten "A", "B" und "A * B" gibt?
Re: Char () zu einem InteraktionseffektHier ist was ich mir ausgedacht habe. Ich entschied mich, Barstones Standard Least Squares zu bauen, anstatt die Personality zu ersetzen, da ich nicht weiß, ob einige der Fit Model-Persönlichkeiten Nachrichten enthalten, die in Standard Least Squares nicht funktionieren.
script = (Current Data Table() << Get Property("Fit Model"));
scriptAsStandardLeastSquares = Expr(Fit Model());
nFitModelArgs = N Arg( script );
For( k = 1, k <= nFitModelArgs, k++,
headString = Char( Head( Arg( script, k ) ) );
If(
headString == "Y" | headString == "Effects", Insert Into(scriptAsStandardLeastSquares, Arg(script, k))
);
);
Insert Into(scriptAsStandardLeastSquares, Expr(Run()));
Insert Into(scriptAsStandardLeastSquares, Expr(Personality("Standard Least Squares")));
Insert Into(scriptAsStandardLeastSquares, Expr(invisible));
fm = Eval(scriptAsStandardLeastSquares);
effectList = (fm << Get Effect Names);
fm << Close Window;Re: Char () zu einem InteraktionseffektDies ist die Art von Code, den ich verwende:
// s = model script
// easier to manipulate strings
str = Char(NameExpr(s));
// ensure there is a variable to store a reference to the model object
str = "mwin=" || str;<BR /><BR /><BR />// run in the background
SubstituteInto(str,"Fit Model(","Fit Model(Invisible,");
// change emphasis (could also change personality)
pattern = "Emphasis(" + PatArb() + ")" + PatRem();
replace = "Emphasis( Minimal Report ), Run)";
Pat Match(strScript, pattern, replace);
// execute and retrieve results
Eval(Parse(str));
effects = mwin << Get Effect Names;Re: Char () zu einem InteraktionseffektNein, das geht nicht. Angenommen, ich habe einen Wissenschaftler, der absichtlich einen Doppelpunkt im Spaltennamen verwendet (vielleicht um ein Verhältnis darzustellen). Dann die JSL aus @txnelson könnte so aussehen:
testList = {:Name("A:total"), :Name("B:total"), :Name("A:total") * :Name("B:total")};
newtestlist = testList;
For( i = 1, i <= N Items( testlist ), i++,
newtestlist[i] = Substitute(Char( testlist[i] ), ":", "")
);
win = New Window( "Test", Panel Box( "Choose an Effect", Radio Box( newtestList ) ) );Das Optionsfeld gibt dann Atotal, Btotal und den wirklich hässlich aussehenden Namen ("Atotal") * Name ("Btotal") an.
Nein, ich denke, ich würde die Get Effect Names-Nachricht vorziehen, solange ich sie zum Laufen bringen kann. Ich glaube, ich bin bereit, das in Datentabelle gespeicherte Skript umzuschreiben, um Standard Least Squares zu erzwingen, damit ich die Namen bekommen kann.
Re: Char () zu einem InteraktionseffektSobald sie "aufgeladen" sind, können Sie ein S machen ubstituteInto die Doppelpunkte entfernen
Re: Char () zu einem InteraktionseffektObwohl ich vielleicht das Fit Model-Skript einfach umschreiben könnte, um die Standard Least Squares-Persönlichkeit zu erzwingen und das (falsche) Modell so weit auszuführen, dass ich die Effektnamen erhalten kann?
Re: Char () zu einem InteraktionseffektDies ist eigentlich sehr vielversprechend für meine Anwendung, funktioniert aber nur mit der Fit Least Squares-Persönlichkeit. Leider brauche ich etwas, das in Fit Least Squares funktionieren kann, aber auch mit Fit Mixed und Generalized Regression.
Re: Char () zu einem InteraktionseffektDies funktioniert, lässt aber die Doppelpunkte zurück. Dies wird auch ziemlich hässlich, wenn die Spaltennamen Zeichen enthalten, die JMP zwingen, den Spaltennamen in der Funktion Name () einzugeben.
Re: Char () zu einem InteraktionseffektIch habe dieses Problem in der Vergangenheit auf folgende Weise gelöst
testList = {:A, :B, :A * :B};
newtestlist = testList;
For( i = 1, i <= N Items( testlist ), i++,
newtestlist[i] = Char( testlist[i] )
);
win = New Window( "Test", Panel Box( "Choose an Effect", Radio Box( newtestList ) ) );Re: Char () zu einem InteraktionseffektManchmal ist eine indirekte Route einfacher. Wenn Sie das Skript haben, führen Sie es im Hintergrund aus, senden Sie die Get Effect Names an das Fit-Model-Objekt. Dann haben Sie die Liste, die Sie für Ihre Optionsfelder verwenden können.