Ho presentato molto rapidamente alcuni suggerimenti e trucchi per JMP Scripting durante Club degli sceneggiatori JMP Q2 . Ecco gli stessi suggerimenti in forma di testo (e un po' di più). Le mie spiegazioni tecniche potrebbero non essere corrette e potrei usare termini sbagliati qua e là, poiché non mi interessa capire completamente Tutto quanto (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 JMP direttamente nell'editor di script di JMP. È possibile abilitare Embedded Log da Preferenze JMP in Script Editor. JMP16 consente anche di modificare l'altezza del registro incorporato (io personalmente utilizzo valori compresi tra il 25% e il 30%).

Forse link utili
Testo Accedi a JMP (guida di jmp.com)
Suggerimento2 Per JMP16+ abilitare il 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 per 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
Accesso avanzato JMP 16: cambia tutto
Accesso avanzato JMP (jmp.com)
Tip3 Valutazione dei valori dalle variabili alle espressioni
Questo è un argomento abbastanza comune nella comunità 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 con Eval(EvalExpr()). Quello senza viene lasciato con il nome della variabile nella formula
Visualizza di più...
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]
)
)
);
power = 3;
new_col = dt << New Column("x to " || char(power), Numeric, Continuous, Formula(:x^power));
Show(new_col << Get Formula);
power = 4;
Eval(EvalExpr(new_col = dt << New Column("x to " || char(power), Numeric, Continuous, Formula(:x^Expr(power)))));
Show(new_col << Get Formula);
Tabella dati e formule (prendere nota dell'aspetto delle formule e di cosa è successo ai valori da x a 3 (ora devono essere alimentati da 4))

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

Questo perché sto usando i nomi predefiniti qui(1); nello script di esempio, ma in questo caso l'errore è positivo. Se non stavo usando i nomi predefiniti qui(1); per avviare il mio script (vedi consiglio in più ), aggiungerei la variabile di potenza allo spazio dei nomi globale e la tabella dei dati conoscerebbe comunque il valore di potenza 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 si chiederà perché non funziona.
Esempio2 Impostare i limiti delle specifiche
Questo script di esempio mostra come utilizzare Eval(EvalExpr()) per ottenere valori nelle proprietà delle colonne (in questo caso Spec Limits).
Visualizza di più...
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)}
);
)
);
Esempio3 << Alla chiusura
Come ultimo esempio dimostrerò come 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 Semiconductor Capability 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 di più...
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");
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 di più...
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");
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 Avvia i tuoi script con i nomi predefiniti qui(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
Ambito 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)
Per quanto riguarda il
Names default to here (1);
Ho anche visto alcune persone usare
Clear globals (1);
inoltre all'inizio di una sceneggiatura.
Sento di poter capire perché sarebbe utile, ma qual è la tua opinione in merito?
@Ressel , personalmente eviterei Clear Globals(1) poiché potrebbe interferire con altri script che potrebbero essere in esecuzione. Sarebbe molto più sicuro applicare l'ambito a qualsiasi variabile di script in locale o nel proprio spazio dei nomi.
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, in cui puoi fare clic sul pulsante Richiama e quindi su qualsiasi variabile o colonna che hai inserito in ruoli o valori che ' immessi per l'uso in una piattaforma JMP vengono sostituiti automaticamente e non è necessario tornare indietro e farlo manualmente. Se all'inizio dello script è presente il clear globals(1), ogni volta che esegui lo script, le variabili di richiamo verranno cancellate dalla memoria, rendendo di fatto inutile la funzione di richiamo.
ds