Analizzare le informazioni dallo script della tabella dei modelli<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao, sto cercando di creare un metodo efficace per eliminare i termini del modello dallo script del modello. Quindi questo è uno script di esempio (creato automaticamente con DOE personalizzato):
Fit Model (
Y (: spessore rimosso),
effetti (
: Nome ("Tipo di gas {1 & 1-3}"),
: Nome ("Tipo di gas {1-3}"),
:Temperatura,
: Potenza al plasma,
: Tempo al plasma,
: Etch Gas Flow,
: Pressione del reattore,
: Nome ("Tipo di gas {1 & 2-3}") *: Temperatura,
: Nome ("Tipo di gas {1 & 2-3}") *: Potenza al plasma,
: Nome ("Gas Type {1 & 2-3}") *: Plasma Time,
: Nome ("Tipo di gas {1 & 2-3}") *: Etch Gas Flow,
: Nome ("Gas Type {1 & 2-3}") *: Reactor Pressure,
: Temperatura *: pressione del reattore,
: Plasma Power *: Plasma Time,
: Plasma Power *: Etch Gas Flow,
: Temperatura *: Temperatura
),
Personalità ("minimi quadrati standard"),
Enfasi ("Effetto leva")
)
Sono interessato a ottenere un elenco dei fattori presenti nella sezione effects (). E l'elenco dei termini del modello nella stessa parte della stringa. Il problema è che la lunghezza totale della stringa può variare, il numero di parentesi può variare e l'ordine di Y (), Effetti (), Personalità (), Enfasi () può muoversi.
Cose a cui pensava ma non sanno come fare:
- usa le parole per dividere la stringa su "," ma solo al livello più alto. Ora trova la parola che inizia con gli effetti e poi la dividi nuovamente su ",". Quelli senza "*" sono i fattori, il tutto è l'elenco dei termini del modello.
- Trova "Effetti", quindi inizia a contare, ogni "(" è +1 ogni ")" è -1 e quando arrivi a 0 è stata l'ultima parentesi chiusa che appartiene a Effetti ora usa substr per rimuovere quella parte.
Ma mi sembra che ci dovrebbe essere un modo più semplice per analizzare lo script poiché questo è ciò che fa il linguaggio di scripting.
Ri: Analizzare le informazioni dallo script della tabella del modello Ecco un modo, io ispirato dal secondo esempio di Ian, da ottenere gli effetti quando il numero e l'ordine degli argomenti del modello sono sconosciuti.
fm_expr = expr (
Fit Model (
Y ( : Spessore rimosso ) ,
effetti (
: Nome ( "Tipo di gas {1 & 1-3}" ) ,
: Nome ( "Tipo di gas {1-3}" ) ,
: Temperatura ,
: Potenza al plasma ,
: Tempo al plasma ,
: Etch Gas Flow ,
: Pressione del reattore ,
: Nome ( "Tipo di gas {1 & 2-3}" ) * : Temperatura ,
: Nome ( "Tipo di gas {1 & 2-3}" ) * : Potenza al plasma ,
: Nome ( "Tipo di gas {1 & 2-3}" ) * : Tempo al plasma ,
: Nome ( "Tipo di gas {1 & 2-3}" ) * : Etch Gas Flow ,
: Nome ( "Tipo di gas {1 & 2-3}" ) * : Pressione del reattore ,
: Temperatura * : Pressione del reattore ,
: Potenza al plasma * : Tempo al plasma ,
: Potenza al plasma * : Etch Gas Flow ,
: Temperatura * : Temperatura
) ,
Personalità ( "Minimi quadrati standard" ) ,
enfasi ( "Effetto leva" )
)
) ;
// Crea una lista di effetti
io = 1 ;
Mentre ( ! È vuoto ( arg_i = Arg ( fm_expr , io )) ,
Se ( Inizia con ( carbonizzare ( Nome Espr ( arg_i )) , "Effetti" ) ,
n = N Arg ( arg_i ) ;
effetti = Ripetere (
K = 0 ;
{ K ++ ; Arg ( arg_i , K )} ;,
n
) ;
Rompere () ;
,
io ++
)
) ;
Stampare ( effetti ) ;
Ri: Analizzare le informazioni dallo script della tabella del modelloGrazie!
Ri: Analizzare le informazioni dallo script della tabella del modelloNon rispondendo completamente alla tua domanda, ma gli script JMP sono in realtà espressioni e possono essere manipolati come tali (cerca 'Head ()', 'Arg ()' e 'NArg {}' nello Scripting Index o Guide). Per esempio:
fm = expr (
Fit Model (
Y ( : SILICE ) ,
effetti (
: ABRASIONE & RS ,
: MODULO & RS ,
: ALLUNG & RS ,
: DUREZZA & RS ,
: ABRASIONE * : ABRASIONE ,
: ABRASIONE * : MODULO ,
: MODULO * : MODULO ,
: ABRASIONE * : ALLUNG ,
: MODULO * : ALLUNG ,
: ALLUNG * : ALLUNG ,
: ABRASIONE * : DUREZZA ,
: MODULO * : DUREZZA ,
: ALLUNG * : DUREZZA ,
: DUREZZA * : DUREZZA
) ,
Personalità ( "Minimi quadrati standard" ) ,
enfasi ( "Screening degli effetti" ) ,
Correre
)
) ;
effetti = Arg ( fm , 2 ) ;
per ( io = 1 , io <= NArg ( effetti ) , io ++, Stampare ( Arg ( effetti , io ))) ;
D'altra parte, possono anche essere trattati come stringhe di testo, nel qual caso apprendono "RegEx ()" per l'approccio più generale e potente.
Incollare il codice con la formattazione sembra un piccolo OS e dipende dal browser - Io uso Safari su un Mac.
Ri: Analizzare le informazioni dallo script della tabella del modelloCiao Ian, grazie per la tua risposta, risolve il mio problema:
NamesDefaultToHere (1);
dt = current data table ();
fm = dt << script di esecuzione ("Modello");
prova (fm = fm << run); // Poiché questi script di solito non includono il comando run.
effectNames = fm << getEffectNames;
Rapporto (fm) << closeWindow;
mainEffectNames = {};
for (i = 1, i <= NItems (effectNames), i ++, if (NItems (Words (effectNames , "*")) == 1, InsertInto (mainEffectNames, effectNames )));
Stampa (effectNames, mainEffectNames);
Comunque per il mio apprendimento: c'è un modo per analizzare le informazioni dalla stringa in cui è possibile cercare una parentesi chiusa appartenente a una determinata parentesi di apertura e ottenere il pezzo di corda tra quelle parentesi?
E come formatti gli script in questo forum per sembrare degli script?
Ri: Analizzare le informazioni dallo script della tabella del modelloSe non ti dispiace eseguire lo script, potresti fare qualcosa come:
NamesDefaultToHere ( 1 ) ;
dt = Aperto ( "$ SAMPLE_DATA / Tiretread.jmp" ) ;
fm = dt << Fit Model (
Y ( : SILICE ) ,
effetti (
: ABRASIONE & RS ,
: MODULO & RS ,
: ALLUNG & RS ,
: DUREZZA & RS ,
: ABRASIONE * : ABRASIONE ,
: ABRASIONE * : MODULO ,
: MODULO * : MODULO ,
: ABRASIONE * : ALLUNG ,
: MODULO * : ALLUNG ,
: ALLUNG * : ALLUNG ,
: ABRASIONE * : DUREZZA ,
: MODULO * : DUREZZA ,
: ALLUNG * : DUREZZA ,
: DUREZZA * : DUREZZA
) ,
Personalità ( "Minimi quadrati standard" ) ,
enfasi ( "Screening degli effetti" ) ,
Correre
) ;
effectNames = fm << getEffectNames ;
rapporto ( fm ) << chiudi la finestra ;
mainEffectNames = {} ;
per ( io = 1 , io <= NItems ( effectNames ) , io ++, Se ( NItems ( Parole ( effectNames [ io ] , "*" )) == 1 , Inserire ( mainEffectNames , effectNames [ io ]) )) ;
Stampare ( effectNames , mainEffectNames ) ;
Il messaggio 'getEffectNames' fornisce un'espressione più semplice, ma è comunque necessario analizzarlo per ottenere solo gli effetti principali. Esistono altri modi indiretti per ottenere gli effetti principali dal rapporto "FitModel".
Ma hai detto "creato automaticamente da DOE personalizzato", nel qual caso potrebbe essere più semplice ottenere l'elenco dei fattori da lì.