Wie kann verhindert werden, dass „Run in Fit Model“ einen Bericht erstellt?Ich schreibe ein Skript, das Folgendes tut:
- Öffnet ein Fenster „Modell anpassen“
- Ermöglicht dem Benutzer, es mithilfe der Makros und anderer Funktionen im Fenster „Modell anpassen“ zu füllen.
- Ermöglicht dem Benutzer, auf „Ausführen“ zu klicken. Anschließend wird eine möglicherweise zeitintensive Berechnung durchgeführt und ein Bericht erstellt.
Die Berechnung, die ausgeführt wird, wenn auf „Ausführen“ geklickt wird, wird von einem Skript erstellt, das in der Schaltfläche „Ausführen“ gespeichert ist.Dieses Skript erstellt einen Bericht, der dem Benutzer zur Verfügung steht sollen sehen.Da das Skript jedoch zur Schaltfläche „Ausführen“ hinzugefügt wird, wird der gewünschte Bericht angezeigt, gefolgt von dem Bericht „Kleinste Quadrate anpassen“, den Run selbstständig erstellt.Der Bericht „Fit Least Squares“ ist für den Benutzer bedeutungslos.
Das folgende Skript veranschaulicht das Problem. In diesem Skript erstellt der Ausdruck in der Schaltfläche „Ausführen“, „runExpr“, einfach eine Klondatentabelle; Dies dient der Vereinfachung der Darstellung.Im eigentlichen Skript führt dieser Ausdruck (runExpr) zahlreiche Analysen basierend auf den im Fenster „Modell anpassen“ eingegebenen Effekten durch. Außerdem füllt der Benutzer im eigentlichen Skript interaktiv das Fenster „Modell anpassen“; Der Einfachheit halber habe ich das Fenster „Modell anpassen“ im folgenden Skript ausgefüllt.
Names Default To Here( 1 );
runExpr = Expr(
// Creates a clone data table for illustration;
dt << Subset( Output Table( "Clone Table" ), All rows );
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fmSLS = Fit Model(
Y( :weight ),
Effects( :age, :height, :age * :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
);
r = fmSLS << Report;
r[Button Box( 9 )] << Set Script( runExpr);
Wenn Sie wie ein Benutzer auf „Ausführen“ klicken, wird die Klontabelle angezeigt, aber das Fenster oben ist der Bericht „Kleinste Quadrate anpassen“, der mit dem Befehl „Ausführen“ erstellt wurde.Ich möchte verhindern, dass dieser Bericht erscheint.
Zu diesem Zweck:
- Ich habe versucht, Throw() und Stop() in runExpr zu verwenden, aber ohne Erfolg.
- Ich habe über die Verwendung eines modalen Fensters nachgedacht, benötige jedoch die Makrofunktionalität im Fenster „Modell anpassen“ und sehe nicht, wie ich ein modales Fenster als Hilfe erstellen kann.
- Die einzige Möglichkeit, die ich mir überhaupt vorstellen kann, um den Bericht „Least Squares anpassen“ zu bearbeiten, besteht darin, dem Skript eine Zeitschleife hinzuzufügen, wie unten dargestellt. Aber das ist voller Gefahren.Es gibt keine Möglichkeit zu wissen, wie lange es dauern wird, bis runExpr abgeschlossen ist, und wenn der Benutzer beschließt, nicht auf „Ausführen“ zu klicken, wird das Skript einfach weiter ausgeführt, bis es zu einer Zeitüberschreitung kommt.
Für Anregungen oder Hilfe wäre ich sehr dankbar!
Names Default To Here( 1 );
runExpr = Expr(
// Creates a clone data table for illustration;
dt << Subset( Output Table( "Clone Table" ), All rows );
fm_Flag = 1
);
fm_Flag = 0; // Sets flag for timing
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fmSLS = Fit Model(
Y( :weight ),
Effects( :age, :height, :age * :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
);
r = fmSLS << Report;
r[Button Box( 9 )] << Set Script( runExpr; fm_Flag = 1 );
For( i = 1, i <= 100, i++,
If(fm_Flag < 1, Wait(0.5), windowsopen = Get Window List(); windowsopen[nItems(windowsopen)] << Close Window; Stop() )
);
MassenanpassungBetreff: Wie kann verhindert werden, dass „Run in Fit Model“ einen Bericht erstellt?Oh mein Gott, das ist genial!!!Was für eine perfekte „out-of-the-box“-Lösung!!!
Ich hatte geplant, später heute mit der Platzierung der benutzerdefinierten Schaltfläche herumzuspielen, aber ich weiß nicht, ob ich jemals versucht hätte, sie zu platzieren über die Schaltfläche „Ausführen“.Das ist eine tolle Lösung und ich denke, dass ich dieses Konzept auch anderswo nutzen kann.Ich wette, dass viele Benutzer es nützlich finden werden!
Vielen Dank!!!
Betreff: Wie kann verhindert werden, dass „Run in Fit Model“ einen Bericht erstellt?Ah ha!Es scheint schwierig zu sein, die Schaltfläche „Ausführen“ zu entfernen oder zu ändern, aber Sie können Ihre neue Schaltfläche direkt darüber platzieren (zumindest mit JMP 15.2.1 unter Windows ...):
Names Default to Here( 1 );
run expr = Expr(
// desired report
personality = Report( fm )[ComboBox(1)] << Get Selected;
Show( personality );
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fm = dt << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
// New button the user should click on
(((fm << XPath("//ButtonBox[@title='Run']"))[1] << parent) ) << prepend(
bb = Button Box("Launch custom script", run expr; fm << Close Window;) );
//make sure it is right on top of the old one
bb << set property("Margin", {Left(0), Right(0), Bottom(0), Top(0)});
// Rename old button in case it isn't hidden, and show error if user clicks it
(fm << XPath("//ButtonBox[@title='Run']"))[1] << Set Script( New Window( "Use other button",
Text Box("Woops...\!n\!nPlease use the button at the bottom of the fit model dialog to launch this script.")));
(fm << XPath("//ButtonBox[@title='Run']"))[1] << Set Button Name( "Do Not Use");Betreff: Wie kann verhindert werden, dass „Run in Fit Model“ einen Bericht erstellt?Mark, du wirfst eine sehr gute Frage auf und bringst einen guten Standpunkt zum Ausdruck.Vielleicht gibt es einen besseren Weg, mein Ziel zu erreichen.Bitte lesen Sie meine Antwort auf „ih“ oben.Ich brauche das Fenster „Modell anpassen“ einfach wegen seiner Flexibilität, die es Benutzern ermöglicht, Effekte zu konstruieren. Das Skript, das ich schreibe, nutzt diese Effekte, um Modelle mit gebrochenen Bootstrap-Gewichten zu erstellen.(Wie auch immer, es gibt weitere Details in der Antwort auf „ih“ oben.)
Ich weiß, dass es Skriptfunktionen gibt, die beim Konstruieren von Modelleffekten helfen, aber man müsste wirklich viele der Funktionen replizieren, die im Fenster „Modell anpassen“ vorhanden sind.Ich wünschte, man könnte dieses Fenster für die Effektkonstruktion nutzen, ohne ein Modell einbauen zu müssen!
Betreff: Wie kann verhindert werden, dass „Run in Fit Model“ einen Bericht erstellt?Vielen Dank für diesen Vorschlag – das ist etwas, woran ich nicht gedacht habe, und es ist vielleicht das Beste, was man machen kann.Wenn der Benutzer jedoch auf „Ausführen“ klickt, was zwangsläufig passieren wird, wird „Fit Model“ ausgeführt und der Benutzer muss das Skript erneut ausführen.Es ist nicht optimal.Aber vielleicht kann ich diese Idee nutzen.
Sowohl Sie als auch Mark haben eine gute Frage aufgeworfen: Warum bestehe ich darauf, das Fenster „Modell anpassen“ zu verwenden?Das liegt daran, dass ich dem Benutzer den Zugriff auf die Makros und Cross-Funktionalität ermöglichen muss.Benutzer werden Effekte hinzufügen, die sie für wichtig erachten, und in vielen Fällen umfassen diese ein vollständiges faktorielles Modell zusammen mit einigen zusätzlichen Drei-Wege-Interaktionstermen.Ich spielte mit der Idee, einen modalen Dialog zu erstellen, der es Benutzern ermöglichen würde, „Typen“ von Modellen einzugeben, aber diese Funktionalität würde den Benutzer einschränken.Deshalb kam ich immer wieder auf die Notwendigkeit zurück, ein Fenster mit den meisten Funktionen von Fit Model zu haben.Außerdem sind Benutzer mit der Eingabe von Effekten mithilfe von „Modell anpassen“ vertraut, sodass die Verwendung dieses Dialogfelds aus dieser Perspektive sinnvoll ist.(Ich schätze den Link, den Sie bereitgestellt haben, aber er befasst sich nicht mit der Konstruktion von Effekten.Es würde viel Skripting erfordern, um die Funktionen „Kreuz“, „Vollfaktoriell“, „Fakultär zu Grad“ und „Polynom zu Grad“ zu replizieren, die in „Modell anpassen“ vorhanden sind.Tatsächlich glaube ich nicht, dass ich dazu fähig bin!)
Warum will ich das nicht? laufen Passendes Modell?Denn alles, was ich brauche, sind die Reaktionen und die Auswirkungen; Ich benötige lediglich die Funktionalität von Fit Model, um Effekte zu konstruieren.Das benutzerdefinierte Skript verwendet diese zusammen mit dem fraktionierten, zufällig gewichteten Bootstrap, um Modelle mithilfe der Modellmittelung zu erstellen.Das Skript zum Erstellen dieser Modelle und eines zusammenfassenden Berichts ist derzeit der Ausdruck, der in der Schaltfläche „Ausführen“ platziert wird.Wenn Sie also auf „Ausführen“ klicken, wird dieser benutzerdefinierte Bericht erstellt.Alles ist gut, außer dass der von „Fit Model“ erstellte Bericht, der irrelevant ist, über dem benutzerdefinierten Bericht angezeigt wird, wenn der Benutzer auf „Ausführen“ klickt.
Nochmals vielen Dank für Ihre Hilfe.Ich werde auf jeden Fall mit der Idee der benutzerdefinierten Schaltflächen spielen.
Betreff: Wie kann verhindert werden, dass „Run in Fit Model“ einen Bericht erstellt?Warum verwenden Sie das Dialogfeld „Modell anpassen“, wenn Sie die Plattform „Kleinste Quadrate anpassen“ nicht möchten? Möglicherweise gibt es einen anderen Weg, um das zu erreichen, was Sie wollen.
Betreff: Wie kann verhindert werden, dass „Run in Fit Model“ einen Bericht erstellt?Wie viel vom Dialogfeld „Modellspezifikation“ benötigen Sie? Ich denke, es wäre besser, wenn Sie diesen Schritt durch ein neues Fenster ersetzen würden, das genau auf Ihre Bedürfnisse zugeschnitten ist.Beispiele in diesem Beitrag könnten helfen:
Aufforderung zur Eingabe von Spalten, völlig modal
Wenn Sie das Fenster „Modellspezifikation“ verwenden möchten, können Sie dem Benutzer eine neue Schaltfläche zum Klicken geben:
Names Default to Here( 1 );
run expr = Expr(
// desired report
personality = Report( fm )[ComboBox(1)] << Get Selected;
Show( personality );
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fm = dt << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
// Show error if user clicks the wrong button
(fm << XPath("//ButtonBox[@title='Run']"))[1] << Set Script( New Window( "Use other bottom",
Text Box("Woops...\!n\!nPlease use the button at the bottom of the fit model dialog to launch this script.")));
// Button the user should click on
(fm << XPath("//OutlineBox"))[1] << Append(Button Box("Launch custom script", run expr; fm << Close Window;));<BR />
Betreff: Wie kann verhindert werden, dass „Run in Fit Model“ einen Bericht erstellt?Richtig, es scheint, dass das Skript im Schaltflächenfeld ausgeführt wird, bevor das integrierte Verhalten der Schaltfläche „Ausführen“ ausgeführt wird.
Dieses kleine Problem ist ärgerlich! Es muss eine Möglichkeit geben, die Ausführung des Skripts zu verzögern, bis eine Aktion (wie das Drücken der Schaltfläche „Ausführen“) erfolgt. Oder um die Ausführung des integrierten Verhaltens zu verhindern (aber wie gesagt, das Einfügen von Throw und Stop in runExpr hat nicht funktioniert).
Danke, dass du versucht hast zu helfen, Mark.Betreff: Wie kann verhindert werden, dass „Run in Fit Model“ einen Bericht erstellt?Du hast Recht. Ich habe versucht, meine Abbildung zu ändern, aber das dem Schaltflächenfeld beigefügte Skript wird ausgewertet, bevor der Bericht „Kleinste Quadrate anpassen“ erstellt wird, sodass es wirkungslos ist.
Names Default to Here( 1 );
run expr = Expr(
// desired report
personality = Report( fm )[ComboBox(1)] << Get Selected;
Show( personality );
// undesired report
window = Get Window List();
For( w = 1, w <= N Items( window ), w++,
If( Contains( window[w] << Get Window Title, "Fit Least Squares" ),
window[w] << Close Window;
Break();
);
);
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fm = dt << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
Report( fm )[ButtonBox(9)] << Set Script( run expr );
// nothing after this point
Betreff: Wie kann verhindert werden, dass „Run in Fit Model“ einen Bericht erstellt?Mark, danke, aber ich glaube nicht, dass das für meine Situation funktioniert.Der Benutzer muss das Fenster „Modell anpassen“ füllen.Wenn ich Ihre Fensterkomponente zu meinem Skript hinzufüge, wird sie ausgeführt, bevor der Benutzer das Fenster „Modell anpassen“ gefüllt hat.Wenn der Benutzer also auf „Ausführen“ klickt, ist dieser Teil des Skripts „verschwunden“.Bitte sehen Sie sich das zweite Skript in meinem Beitrag an, um meine sehr unelegante Problemumgehung in der von Ihnen vorgeschlagenen Richtung zu sehen.Man muss die Zeit berücksichtigen, die der Benutzer zum Auffüllen des Modells „Anpassen“ benötigt, und dann die Zeit, die zum Ausführen des Skripts über die Schaltfläche „Ausführen“ benötigt wird.
Betreff: Wie kann verhindert werden, dass „Run in Fit Model“ einen Bericht erstellt?Ich verstehe nicht, wie ich das Skript ändern kann, das Sie an das Feld „Ausführen“ anhängen, aber Sie können das Fenster anschließend finden und schließen. Siehe diese Abbildung:
fm = Current data Table() << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" )
);
fls = fm << Run;
window = Get Window List();
For( w = 1, w <= N Items( window ), w++,
If( Contains( window[w] << Get Window Title, "Fit Least Squares" ),
window[w] << Close Window;
Break();
);
);