Guida allo scripting per Table Box() all'interno di una List Box()Ciao a tutti,
Sto cercando di scrivere un codice JSL che prenda i dati da una tabella di dati e li visualizzi graficamente affinché l'utente possa scegliere per ulteriori analisi. Quello che mi piacerebbe ottenere è qualcosa di simile a un mix tra il report Eigenvalue della piattaforma PCA e il report Effect Summary della piattaforma Fit Model. Vorrei che l'aspetto visivo assomigliasse al rapporto PCA, ma la funzionalità (ad esempio la possibilità di selezionare una riga) del rapporto Riepilogo effetti.
Rapporto sugli autovalori PCA (come voglio che appaia):

Fit Model Effect Summary report (la funzionalità che vorrei). In questa piattaforma si può selezionare una riga nella List Box() e scegliere di "rimuovere" o "aggiungere". Non voglio rimuovere o aggiungere, ma voglio che l'utente sia in grado di selezionare la riga (dall'output sopra):

Ho allegato la tabella dei dati con cui sto lavorando, questa è la "Tabella dei dati correnti ()" nel codice JSL di seguito. Il codice JSL qui sotto può aiutarmi in parte, ma non esattamente quello che voglio.
Names Default To Here( 1 );
PC_dt = Current Data Table();
PC_n = {};
PC_eigv = {};
PC_per = {};
PC_cump = {};
For( i = 1, i <= N Rows( PC_dt ), i++,
Insert Into( PC_n, PC_dt:"Number"n[i] );
Insert Into( PC_eigv, Round( PC_dt:"Eigenvalue"n[i], 5 ) );
Insert Into( PC_per, Round( PC_dt:"Percent"n[i], 5 ) );
Insert Into( PC_cump, Round( PC_dt:"cumulative Percent"n[i], 5 ) );
);
PC_Rpt_win = New Window( "PC Results",
Outline Box( "Eigenvalues & cumulative Percent",
//List Box(
//List Box(
Table Box(
Number Col Box( "Number", Eval List( PC_n ) ),
Number Col Box( "Eigenvalue", Eval List( PC_eigv ), <<SET format=""></SET>
Con le sezioni commentate ottengo il seguente output dal codice (nessuna riga è selezionabile, tuttavia):

Non so davvero se ho bisogno dell'intera porzione di codice pre-Outline in cui genero elenchi per PC e autovalori, ecc. Ma mi è sembrato il modo logico per farlo dato che ho a che fare con le colonne in una tabella di dati e le funzioni richiedono elenchi. Funziona, anche se non necessario.
</CODE></P><P> </P><P>Se includo una o entrambe le chiamate List Box() commentate attorno a Table Box(), ottengo quanto segue. Le righe sono selezionabili, ma non viene visualizzato nulla:</P><P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 221px;"><span class="lia-inline-image-display-wrapper" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 221px;"><img src="https://us.v-cdn.net/6038925/uploads/images/37045iA319787974999980/DiedrichSchmidt_3-1635336043749.png" role="button" title="DiedrichSchmidt_3-1635336043749.png" alt="DiedrichSchmidt_3-1635336043749.png" /></span></SPAN></SPAN></P><P>Non sono sicuro di cosa sto facendo di sbagliato e lo Scripting Index ha esempi limitati di come utilizzare correttamente la chiamata List Box() con una Table Box(). Ho provato a seguire la struttura ad albero dalla finestra del report della piattaforma Fit Model, ma non funziona.</P><P> </P><P>In sintesi, vorrei correggere quanto segue nel mio script:</P><OL><LI>Correggi il Plot Col Box in modo che abbia la curva percentuale cumulativa come mostra il rapporto del PC (prima immagine sopra). Questo non è così critico come il punto 2.</LI><LI>Correggere la chiamata List Box() attorno a Table Box() in modo che l'utente possa selezionare una riga nella List Box che verrà quindi inviata a un'altra funzione per un'ulteriore analisi.</LI></OL><P>Grazie per qualsiasi suggerimento e aiuto!,</P><P>DS</P></LINGO-BODY><LINGO-LABS id="lingo-labs-430708" slang="en-US" mode="NONE"><LINGO-LABEL>Automazione e scripting</LINGO-LABEL><LINGO-LABEL>Personalizzazione di massa</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-431611" slang="en-US" mode="NONE">Re: Guida allo scripting per Table Box() all'interno di una List Box()</LINGO-SUB><LINGO-BODY id="lingo-body-431611" slang="en-US" mode="NONE"><P>Ecco un altro modo per ottenere i dati dalle tabelle in un report e il T2 da un report PLS:</P>
<P> </P>
<PRE><CODE class=" language-jsl">Names default to here(1);
dt = Open("$Sample_data/Quality Control/Chemical Reactor Process.jmp");
pls = dt << Run Script("Fit PLS (Pro Only)");
//get values for the first column with the name R²Y by searching for display elements that have a
//child header box containing specific values
(pls << XPath("//NumberColBox[NumberColBoxHeader[text()='R²Y']]"))[1] << get as matrix;
//generalize this into a function and then call it for others column headers
getColumn = function({c},(pls << XPath("//NumberColBox[NumberColBoxHeader[text()='" || c || "']]"))[1] << get as matrix);
getColumn("Q²");
getColumn("Y Responses");
//To get T2, you need to send the message to a specific fit within the platform. As Mark mentioned this is tricky because you
//need to send the message to the analysis layer (I've been calling it a scriptable object), but to find the right object you
//navigate the report structure. I like Xpath, so here is how I would get the report (implied with the XPath function),
//navigate to the outline box (picks the first one matching a name), get the scriptable object or analysis layer and then
//send the message to save T2.
firstfit = (((pls << XPath("//OutlineBox[contains(text(),'NIPALS Fit with ')]"))[1]) << Get Scriptable Object) << Save T Square();
firstfit << Save T Square;
//This might better illustrate what is happening
show properties( report(pls)[Outline Box( "Partial Least Squares" )][Outline Box( "NIPALS Fit with 6 Factors Using Fast SVD" )] << get scriptable object );
Re: Guida allo scripting per Table Box() all'interno di una List Box()Questo problema nasce da un comune punto di confusione. Una piattaforma JMP è composta dal livello di analisi e dal livello di report. Il livello di analisi è responsabile del calcolo e risponde ai comandi presentati nei menu del triangolo rosso. Il livello di report è responsabile della presentazione delle informazioni. Il livello del report è una struttura nidificata di caselle di visualizzazione. È necessario inviare il messaggio Save T Square al livello di analisi, non al livello di report. Il riferimento al layer di analisi è quello che viene restituito all'avvio della piattaforma. Per esempio,
biv = Current Data Table() << Bivariate( Y( :weight ), X( :height ), Fit Line );
La variabile biv memorizza un riferimento alla piattaforma o più specificamente al livello di analisi. Si ottiene quindi un riferimento al livello di report associato con un altro messaggio.
bivRep = biv << Report;
Spero che questa spiegazione chiarisca la tua domanda.
Re: Guida allo scripting per Table Box() all'interno di una List Box()CIAO @jthi ,
Grazie ancora per il tuo rapido feedback e aiuto. Sì, il <
Ora, il mio unico problema è come risparmiare T². Ogni volta che provo ad indirizzare la casella di contorno in questione dalla piattaforma PCA, ottengo un errore di registro che dice che la casella di visualizzazione non riconosce <
Grazie!,
DS
Re: Guida allo scripting per Table Box() all'interno di una List Box()Per l'articolo 1:
Immagino che ci sia un altro / modo migliore per farlo, ma ho trovato i messaggi << Lower e << Upper (richiede che Lower sia specificato). Con << Lower puoi ottenere i primi valori dalla colonna cumulativa e quindi impostarli su Plot Col Box with Lower
pcb << Lower(ncb << get as matrix);

Con il tuo codice sarebbe simile a questo (aggiungi riferimenti e usa quelli):
Visualizza altro... Per ottenere valori:
A volte potrebbe essere sufficiente utilizzare Make into data table (a seconda della piattaforma e se si utilizza By variable):

e quindi controllando dalla tabella risultante lo script della tabella:


A volte questo fornisce un modo abbastanza rapido per ottenere riferimenti alle caselle di visualizzazione corrette.
Re: Guida allo scripting per Table Box() all'interno di una List Box()CIAO @jthi ,
Bene, dimentica la parte su DModX, lo Scripting Index mi ha mostrato come farlo e funziona come previsto. Ha un esempio per Save T Square, ma non funziona. Continuerò a farlo. Penso di dover fare riferimento alla casella Contorno corretta.
Grazie!,
DS
Re: Guida allo scripting per Table Box() all'interno di una List Box()CIAO @jthi ,
Grazie per il tuo rapido feedback. Ci avevo provato prima, ma non era successo niente, quindi l'ho abbandonato per un'altra strada, ma non portava da nessuna parte. Sono tornato e l'ho provato, e funziona, grazie! La funzionalità aggiunta è utile. Ciò ha definitivamente risolto il punto 2, che era il più importante. Se c'è qualche idea su come risolvere l'elemento 1, sarebbe fantastico, ma non essenziale.
Questo è correlato, ma forse un altro thread (fammelo sapere e lo ripubblicherò come un altro thread).
Sai come utilizzare JSL per salvare i valori DModX e T² dalla piattaforma PCA alla tabella dati? Tutto questo per cercare di automatizzare questo processo, o almeno eliminare molti degli altri passaggi e fornire all'utente solo le basi per decidere il numero di PC da utilizzare per salvare le formule DModX e T².
Grazie!,
DS
Re: Guida allo scripting per Table Box() all'interno di una List Box()C'è un'esigenza specifica per List Box ()? Puoi usare << Imposta Righe Selezionabili(); per rendere le righe selezionabili in Table Box e quindi utilizzarle << imposta funzione cambio riga(Function({this}, ); per aggiungere funzioni alla selezione.
Esempio dall'indice di scripting:
Names Default To Here(1);
New Window("Mountains",
tb = Table Box(
String Col Box("Mountain", {"K2", "Delphi", "Kilimanjaro", "Grand Teton"}),
Number Col Box("Elevation (meters)", {8611, 681, 5895, 4199}),
Plot Col Box("", {8611, 681, 5895, 4199})
)
);
tb << Set Selectable Rows();
tb << set row change function(Function({this}, Print(this << get selected rows)));