Come impedire al modello Run in Fit di produrre un report?Sto scrivendo uno script che fa quanto segue:
- Apre una finestra Stima modello,
- Consente all'utente di popolarlo utilizzando le macro e altre funzionalità nella finestra Stima modello,
- Consente all'utente di fare clic su Esegui, a quel punto viene eseguito un calcolo che potrebbe richiedere molto tempo e viene prodotto un report.
Il calcolo eseguito quando si fa clic su Esegui viene prodotto da uno script memorizzato nel pulsante Esegui.Questo script produce un report, che è ciò che l'utente Dovrebbe Vedere.Tuttavia, poiché lo script viene aggiunto al pulsante Esegui, viene visualizzato il report desiderato, ma viene poi seguito dal report Adatta ai minimi quadrati che Esegui produce autonomamente.Il report Adatta ai minimi quadrati non ha alcun significato per l'utente.
Lo script seguente illustra il problema. In quello script, l'espressione nel pulsante Esegui, "runExpr", crea semplicemente una tabella dati clone; questo per semplificare l'illustrazione.Nello script vero e proprio, l'espressione (runExpr) esegue molte analisi in base agli effetti immessi nella finestra Stima modello. Inoltre, nello script vero e proprio, l'utente popola la finestra Stima modello in modo interattivo; Per comodità, ho popolato la finestra Adatta modello nello script seguente.
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);
Quando si fa clic su Esegui, come farebbe un utente, viene visualizzata la tabella clone, ma la finestra in alto è il report Fit Least Squares prodotto dal comando Esegui.Vorrei evitare che tale rapporto venga pubblicato.
A quello scopo:
- Ho provato a utilizzare Throw() e Stop() in runExpr, ma senza alcun risultato.
- Ho preso in considerazione l'utilizzo di una finestra modale, ma ho bisogno della funzionalità Macro nella finestra Adatta modello e non riesco a capire come creare una finestra modale di aiuto.
- L'unico modo che mi viene in mente per affrontare il rapporto Fit Least Squares è aggiungere un ciclo temporale allo script come illustrato di seguito. Ma questo è irto di pericoli.Non c'è modo di sapere quanto tempo occorrerà per il completamento di runExpr e se l'utente decide di non fare clic su Esegui, lo script continua a essere eseguito fino allo scadere del tempo.
Qualsiasi pensiero o aiuto sarebbe molto apprezzato!
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() )
);
Personalizzazione di massaRi: Come impedire al modello Run in Fit di produrre un report?Oh mio Dio, è geniale!!!Che soluzione perfetta "fuori dagli schemi"!!!
Avevo intenzione di giocare con il posizionamento del pulsante personalizzato più tardi oggi, ma non so se avrei mai provato a posizionarlo Sopra il pulsante Esegui.Questa è un'ottima soluzione e penso che potrò utilizzare questo concetto anche altrove.Scommetto che molti utenti lo troveranno utile!
Grazie mille!!!
Ri: Come impedire al modello Run in Fit di produrre un report?Ah ah!Eliminare o modificare il pulsante Esegui sembra difficile, ma puoi metterci sopra il nuovo pulsante (almeno con JMP 15.2.1 su 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");Ri: Come impedire al modello Run in Fit di produrre un report?Mark, hai sollevato un'ottima domanda e hai espresso un buon punto.Forse c'è un modo migliore per raggiungere il mio obiettivo.Si prega di vedere la mia risposta a "ih" sopra.Ho bisogno della finestra Adatta modello semplicemente per la sua flessibilità nel consentire agli utenti di costruire effetti. Lo script che sto scrivendo utilizza questi effetti per costruire modelli utilizzando pesi bootstrap frazionari.(Comunque, ci sono maggiori dettagli nella risposta a "ih" sopra.)
So che esistono funzioni di scripting che aiutano a costruire effetti del modello, ma sarebbe davvero necessario replicare molte delle funzionalità esistenti nella finestra Adatta modello.Vorrei che si potesse usare quella finestra per costruire effetti senza dover adattare un modello!
Ri: Come impedire al modello Run in Fit di produrre un report?Grazie mille per questo suggerimento: non è qualcosa che avevo considerato e potrebbe essere la cosa migliore che si possa fare.Se l'utente fa clic su "Esegui", cosa che è destinata a succedere, Fit Model viene eseguito e l'utente deve eseguire nuovamente lo script.Non è ottimale.Ma forse posso sfruttare questa idea.
Sia tu che Mark avete sollevato una buona domanda, vale a dire perché insisto nell'usare la finestra Adatta modello.È perché devo consentire all'utente di accedere alle funzionalità Macro e Croce.Gli utenti aggiungeranno gli effetti che considerano importanti e, in molti casi, questi includeranno un modello fattoriale completo insieme ad alcuni termini aggiuntivi di interazione a tre vie.Ho giocato con l'idea di creare una finestra di dialogo modale che consentisse agli utenti di inserire "tipi" di modelli, ma questa funzionalità limiterebbe l'utente.Quindi continuavo a tornare alla necessità di avere una finestra con la maggior parte delle funzionalità di Fit Model.Inoltre, gli utenti hanno familiarità con l'immissione di effetti utilizzando Stima modello, quindi l'utilizzo di quella finestra di dialogo ha senso da quella prospettiva.(Apprezzo il collegamento che hai fornito, ih, ma non affronta la costruzione degli effetti.Sarebbero necessari molti script per replicare le funzionalità Croce, Fattoriale completo, Fattoriale a grado e Polinomio a grado esistenti in Stima modello.In effetti, non penso di esserne capace!)
Ora, perché non voglio farlo correre Modello adatto?Questo perché tutto ciò di cui ho bisogno sono le risposte e gli effetti; Ho semplicemente bisogno della funzionalità Fit Model per costruire effetti.Lo script personalizzato li utilizza, insieme al bootstrap con ponderazione casuale frazionaria, per creare modelli utilizzando la media del modello.Lo script per creare questi modelli e un report di riepilogo è attualmente l'espressione inserita nel pulsante Esegui.Quindi, facendo clic su Esegui viene creato il rapporto personalizzato.Tutto va bene, tranne per il fatto che il report prodotto da Fit Model, che è irrilevante, viene visualizzato sul report personalizzato quando l'utente fa clic su Esegui.
Di nuovo, grazie per il tuo aiuto.Giocherò sicuramente con l'idea del pulsante personalizzato.
Ri: Come impedire al modello Run in Fit di produrre un report?Perché stai utilizzando la finestra di dialogo Stima modello se non desideri la piattaforma Stima dei minimi quadrati? Potrebbe esserci un altro modo per ottenere ciò che desideri.
Ri: Come impedire al modello Run in Fit di produrre un report?Di quanta parte della finestra di dialogo Specifica modello hai bisogno? Non posso fare a meno di pensare che faresti meglio a sostituire quel passaggio con una nuova finestra adatta alle tue precise esigenze.Gli esempi in questo post potrebbero aiutare:
Richiesta di colonne, in modo totalmente modale
Se desideri utilizzare la finestra Specifica del modello, potresti fornire all'utente un nuovo pulsante su cui fare clic:
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 />
Ri: Come impedire al modello Run in Fit di produrre un report?Esatto, sembra che lo script nella casella del pulsante venga eseguito prima che venga eseguito il comportamento integrato del pulsante Esegui.
Questo piccolo problema è irritante! Deve esserci un modo per trattenere l'esecuzione dello script finché non si verifica un'azione (come premere il pulsante Esegui). Oppure, per impedire l'esecuzione del comportamento integrato (ma come ho detto, inserire Throw e Stop in runExpr non ha funzionato).
Grazie per aver cercato di aiutare, Mark.Ri: Come impedire al modello Run in Fit di produrre un report?Hai ragione. Ho provato a modificare la mia illustrazione ma lo script allegato alla casella del pulsante viene valutato prima della creazione del report Adatta ai minimi quadrati, quindi è inefficace.
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
Ri: Come impedire al modello Run in Fit di produrre un report?Mark, grazie, ma non credo che funzioni per la mia situazione.L'utente deve popolare la finestra Stima modello.Se aggiungo il componente finestra al mio script, viene eseguito prima che l'utente abbia popolato la finestra Adatta modello.Pertanto, quando l'utente fa clic su Esegui, quella parte dello script "scompare".Per favore, guarda il secondo script nel mio post per vedere la mia soluzione molto poco elegante sulla falsariga che stai proponendo.È necessario tenere conto del tempo impiegato dall'utente per popolare Fit Model e quindi del tempo necessario per eseguire lo script nel pulsante Esegui.
Ri: Come impedire al modello Run in Fit di produrre un report?Non vedo come modificare lo script allegato alla casella del pulsante Esegui, ma puoi trovare e chiudere la finestra in seguito. Vedi questa illustrazione:
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();
);
);