Versuchen Sie, ein passendes Modell mit Benutzereingaben zu erhalten.Angenommen, ich möchte einem Benutzer mit einem passenden Modell helfen, weil ich weiß, was das Y ist, und ich weiß, dass ich möchte, dass sie gen reg ausführen. Also gebe ich ihnen das.
Names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
fit = dt << Fit Model(
Y( :height ),
Effects(),
Center Polynomials( 0 ),
Personality( "Generalized Regression" ),
Generalized Distribution( "Normal" ),
);
Cool, fit = ein Modelldialog. Aber es ist nicht modal, also läuft das Skript weiter. Wenn sie auf "Run" klicken, wird die Passform gelöscht.
Was ich wirklich möchte, ist, dass der Benutzer seine Daten eingibt. Sobald der Bericht fertig ist, fahre ich fort.
Ich versuche so etwas zu tun, aber ich hatte kein Glück.
while(
obj = current report()[OutlineBox(1)] << Get Scriptable Object();
!(char(obj) == "Fit Generalized[]" & try(obj[1] << Get Prediction Formula; 1, 0));
,
wait(.3);
);
ich JA WIRKLICH Ich möchte nicht die gesamte Benutzeroberfläche mit allen Optionen neu erstellen müssen, zumal Effekte nicht einfach einzufügen sind.
Betreff: Es wird versucht, ein passendes Modell mit Benutzereingaben zu erhalten.Ich kann so etwas tun, aber ich habe das Gefühl, dass es tausend Möglichkeiten gibt, dies zu brechen, und ich hoffe wirklich auf etwas Robusteres.
while(
obj = current report()[OutlineBox(1)] << Get Scriptable Object();
!(char(obj) == "Fit Generalized[]");
,
wait(.3);
);
btn_go_real = report(obj)[Buttonbox(1)];
report(obj)[1] << Append(Buttonbox("MyGo",
<<SET function=""></SET>Betreff: Es wird versucht, ein passendes Modell mit Benutzereingaben zu erhalten.Hilft das? Es ist ein modales Fenster, und Sie können den Ausgabeanzeigebaum erfassen.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
nw = New Window( "example",
<<MODAL></MODAL>
Betreff: Es wird versucht, ein passendes Modell mit Benutzereingaben zu erhalten.Nicht wirklich, wegen des zweiten Fensters
Betreff: Es wird versucht, ein passendes Modell mit Benutzereingaben zu erhalten.Ich habe diesen Ansatz schon einige Male verwendet:
Names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
fit = dt << Fit Model(
Y( :height ),
Effects(),
Center Polynomials( 0 ),
Personality( "Generalized Regression" ),
Generalized Distribution( "Normal" ),
);
// The 'Run' button
runButton = Report(fit)[ButtonBox(9)];
// Append to the in-built action of the button
runButton << setScript(doSomething);
// The 'Terms' shown in 'dt2' reflect the user selections made in teh launch dialog
doSomething =
Expr(
Beep();
fit2 = fit << run;
dt2 = Report(fit2)[tableBox(5)] << makeCombinedDataTable;
dt2 << setName("Parameter Estimates")
);Betreff: Es wird versucht, ein passendes Modell mit Benutzereingaben zu erhalten. @vince_faller , @ian_jmp schlag mich dazu. Tatsächlich verwendet mein Skript zwei Funktionen, um den Dialog offen zu halten, und dann Ians Trick, um ein Skript zu einer Ausführungsschaltfläche hinzuzufügen, die er vor ein paar Jahren (nahe dem 21. August 2018) bereitgestellt hat. Mein doSomething speichert das Modell in der Datentabelle.
Nutzen Sie diese Gelegenheit, um Ian noch einmal für den nützlichen Trick zu danken und den Dialog offen zu halten (den Ian ebenfalls einsetzt). Ich habe tatsächlich seinen Code ausgeschnitten und eingefügt und geändert!
Names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
fit = dt << Fit Model(
Y( :height ),
Effects(),
Center Polynomials( 0 ),
Personality( "Generalized Regression" ),
Generalized Distribution( "Normal" ),
Keep Dialog Open(1)
);
// Define a sample script
doSomething =
Expr(
Beep();
// For( i = 1, i <= N Table(), i++,
// Print( i, Data Table( i ) << getName )
// );
fit << Save to Data Table;
snames = dt << Get Table Script Names();
s = dt << get script( snames[N Items( snames )] );
Show( s );
);
// Assign the sample script to the button (JMP seems to prepend to the script that's already there?)
Report( fit )[Button Box( 9 )] << setScript( doSomething );
Betreff: Es wird versucht, ein passendes Modell mit Benutzereingaben zu erhalten.Vielen Dank @ian_jmp und @ gzmorgan0 Ich habe auf dem aufgebaut, was ihr gesagt habt, und es im Grunde nur zweimal gemacht, weil ich wirklich wollte, dass mein doSomething Sachen macht, nachdem ich auf der Gen Reg-Plattform auf Go geklickt habe. Ich habe sie auch funktionalisiert, um sicherzustellen, dass lokale Variablen mit dieser Methode nichts kaputt machen.
Eine weitere Frage, die ich nicht beantworten konnte, wenn meine Funktion "My_Gen_Reg" den Wert von "doSomething" zurückgeben soll. Wieder versuchen, keine Globals oder Heres zu verwenden.
* Bearbeiten *, ich habe eine Notlösung, die zu funktionieren scheint. Ich mag es immer noch nicht, wie es funktioniert. Es ist definitiv besser als die Benutzeroberfläche neu zu erstellen.
Names default to here(1);
my_Gen_Reg = Function({dt},
{fit, pf_get},
fit = dt << Fit Model(
Y( :height ),
Effects(),
Center Polynomials( 0 ),
Personality( "Generalized Regression" ),
Generalized Distribution( "Normal" ),
//Keep Dialog Open(1)
);
Report( fit )[Button Box( 9 )] << Set Function(
Function({self},
{fit_self, fit2},
fit_self = ((self << Top Parent)[OutlineBox(1)]<<GET scriptable="" object=""></GET>