Ho presentato molto rapidamente alcuni suggerimenti e trucchi per JMP Scripting durante JMP Scripters Club Q2 .
Le mie spiegazioni tecniche potrebbero non essere corrette e potrei usare termini sbagliati qua e là, poiché non mi interessa del tutto capire qualunque cosa (solo la maggior parte) cosa sta succedendo su JMP e JSL, voglio solo che il mio codice funzioni bene e velocemente.
Suggerimento1 Abilitare il registro incorporato di JMP Script Editor
L'abilitazione del registro incorporato consente di visualizzare rapidamente e facilmente il registro di JMP direttamente nell'editor di script di JMP. È possibile abilitare il registro incorporato dalle preferenze di JMP in Script Editor. JMP16 consente anche di modificare l'altezza del registro incorporato (personalmente utilizzo valori compresi tra il 25% e il 30%).

Forse link utili
Accedi con testo in JMP (guida di jmp.com)
Suggerimento2 Per JMP16+ abilitare Registro avanzato
Con JMP16 è stata rilasciata una nuova funzionalità chiamata Enhanced Log. Ciò tiene traccia di ciò che hai fatto in modo interattivo in JMP e fornisce script a tali azioni e rende più semplice consentire a JMP di scrivere script per te.
Il registro avanzato può essere abilitato dalle Preferenze di JMP. Puoi anche apportare modifiche a ciò che viene acquisito e all'aspetto del registro avanzato.

Forse link utili
Registratore di registri e azioni migliorato: novità in JMP 16 e JMP Pro 16
Il registro avanzato in JMP 16: questo cambia tutto
Accesso avanzato a JMP (jmp.com)
Tip3 Valutazione dei valori dalle variabili alle espressioni
Questo è un argomento abbastanza comune nella community di JMP: perché il valore della variabile non viene valutato nella formula, ad esempio. Ciò significa sostanzialmente che i valori non sono stati valutati "fuori" dalle espressioni (variabili). Di seguito sono riportati esempi per dimostrare il problema e le possibili soluzioni (il mio metodo preferito è Eval(EvalExpr()) + Expr()).
Esempio1 Formula
In questo esempio vengono create due colonne, una senza e una con Eval(EvalExpr()). Quello senza viene lasciato con il nome della variabile nella formula
Visualizza altro...
Tabella dati e formule (prendi nota dell'aspetto delle formule e di cosa è successo ai valori da x a 3 (ora sono al potere 4))

Se dovessi salvare questa tabella di dati, riaprirla e aggiungere una nuova riga, riceverai il seguente messaggio di errore, perché la tabella di dati non sa quale sia il valore della potenza.

Questo perché sto usando Names Default To Here(1); nello script di esempio, ma l'errore è una buona cosa in questo caso. Se non stavo usando Names Default To Here(1); per iniziare il mio script (vedi mancia in più ), aggiungerei la variabile power allo spazio dei nomi globale e la tabella dati conoscerebbe ancora il valore power nella stessa sessione JMP. Ora potrei pensare che la mia tabella di dati funzioni come dovrebbe e vado a condividere la tabella e con chi l'ho condivisa rimarrà a chiedersi perché non funziona.
Esempio2 Impostare i limiti delle specifiche
Questo script di esempio dimostra come è possibile utilizzare Eval(EvalExpr()) per ottenere valori nelle proprietà della colonna (in questo caso Spec Limits).
Visualizza altro...
Names Default To Here(1);
// Create demo table
dt = New Table("Demo",
Add Rows(6),
New Column("Label", Character, "Nominal", Set Values({"A", "A", "A", "B", "B", "B"})),
New Column("x", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 5, 6])),
New Column("y1", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y2", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y3", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
)
);
Column(dt, "y1") << Set Property(
"Spec Limits",
{LSL(-1), USL(1), Show Limits(1)}
);
lower_limit = 0.5;
upper_limit = 1.5;
Column(dt, "y2") << Set Property(
"Spec Limits",
{LSL(lower_limit), USL(upper_limit), Show Limits(1)}
);
Eval(
EvalExpr(
Column(dt, "y2") << Set Property(
"Spec Limits",
{LSL(Expr(lower_limit)), USL(Expr(upper_limit)), Show Limits(1)}
);
)
);
Nomi Predefiniti A Qui(1); // Crea una tabella demo dt = New Table("Demo", Add Rows(6), New Column("Label", Character, "Nominal", Set Values({"A", "A", "A", " B", "B", "B"})), Nuova colonna("x", Numerico, "Continuo", Formato("Migliore", 12), Imposta valori([1, 2, 3, 4, 5, 6])), Nuova colonna("y1", Numerico, "Continuo", Imposta valori( [0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0 .685370508348569] ) ), Nuova colonna("y2", Numerico, "Continuo", Imposta valori( [0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569] ) ), Nuova colonna("y3", Numerico, "Continuo", Imposta valori( [0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.6853 70508348569] ) ) ); Column(dt, "y1") << Set Property( "Spec Limits", {LSL(-1), USL(1), Show Limits(1)} ); limite_inferiore = 0,5; limite_superiore = 1,5; Column(dt, "y2") << Set Property( "Spec Limits", {LSL(lower_limit), USL(upper_limit), Show Limits(1)} ); Eval( EvalExpr( Column(dt, "y2") << Set Property( "Spec Limits", {LSL(Expr(lower_limit)), USL(Expr(upper_limit)), Show Limits(1)} ); ) );
Esempio3 << Alla chiusura
Come ultimo esempio, dimostrerò come puoi proteggere il tuo script dalla sovrascrittura accidentale dei riferimenti. Ne ho parlato brevemente nel 2022_Q1 MakeOverChallenge: azione al clic del mouse in vari modi Sfida B
Se esegui questo script e chiudi la finestra bivariata, noterai che la tabella delle capacità dei semiconduttori viene chiusa invece di Big Class. Questo perché quando la finestra bivariata è chiusa, dt fa già riferimento a Semiconductor Capability (avrebbe potuto anche usare un nome di variabile diverso, ad esempio dt_semi)
Visualizza altro...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density);
biv << On Close(
close(dt, no save)
);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
Nomi Predefiniti A Qui(1); dt = Open("$SAMPLE_DATA/Big Class.jmp"); biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density); biv << Alla chiusura( close(dt, no save) ); dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
E se esegui questo codice, la tabella corretta verrà chiusa. Questo perché stiamo valutando il riferimento nella tabella Big Class all'istruzione << On close
Visualizza altro...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density);
Eval(EvalExpr(
biv << On Close(
Close(Expr(biv << Get Data Table), no save)
);
));
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
Nomi Predefiniti A Qui(1); dt = Open("$SAMPLE_DATA/Big Class.jmp"); biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density); Eval(EvalExpr( biv << On Close( Close(Expr(biv << Get Data Table), no save) ); )); dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
Forse link utili
Inserisci un'espressione in un'altra usando Eval Insert, Eval Expr, Parse e Substitute
Funzioni di gestione delle espressioni: Parte I - Svelare Expr(), NameExpr(), Eval(), ... Enigma
Espressioni (Guida di JMP, jmp.com)
Funzioni di espressione (Guida di JMP, jmp.com)
Suggerimento extra Inizia i tuoi script con i nomi predefiniti To Here(1);
Questo ti proteggerà dall'inquinamento dello spazio dei nomi con variabili globali ed eviterà problemi lungo la strada.Questo è qualcosa che faccio sempre quando avvio un nuovo file di script anche se dovessi utilizzare uno spazio dei nomi personalizzato. Lo faccio per evitare anche di creare accidentalmente variabili nello spazio dei nomi globale.
Forse link utili
Scoping avanzato e spazi dei nomi (Guida di JMP, jmp.com) (ottima lettura, ha più pagine, assicurati di controllarne la maggior parte!)
Regole per la risoluzione dei nomi (Guida di JMP, jmp.com)
Scripting essenziale per efficienza e riproducibilità: fare di meno per fare di più (2019-US-TUT-290)
CIAO @Ressel ,
Sono d'accordo con @DonMcCormack , è meglio non cancellare le variabili globali. Un esempio del motivo per cui non vorresti farlo potrebbe essere quando hai una funzionalità "Richiama" nel tuo script, dove puoi fare clic sul pulsante Richiama e quindi su qualsiasi variabile o colonna che hai inserito in ruoli o valori che ' quelli immessi per l'uso in una piattaforma JMP vengono sostituiti automaticamente e non è necessario tornare indietro e farlo manualmente. Se all'inizio del tuo script hai i clear globals(1), ogni volta che esegui lo script, le tue variabili di richiamo verranno cancellate dalla memoria, rendendo di fatto inutile la funzione di richiamo.
DS
@Ressel , personalmente eviterei Clear Globals(1) poiché potrebbe interferire con altri script che potrebbero essere in esecuzione. Sarebbe molto più sicuro definire l'ambito di qualsiasi variabile di script localmente o nel proprio spazio dei nomi.
Per quanto riguarda il
Names default to here (1);
Ho anche visto alcune persone usare
Clear globals (1);
inoltre all'inizio di uno script.
Sento di poter capire perché sarebbe utile, ma qual è la tua opinione in merito?