Errore nell'esecuzione dello script: Send prevede un oggetto scriptabile nell'accesso o nella valutazione di 'Send', dt << /*###*/get nomi colonna (string, Continuous) /*###*/Ho modificato lo script condiviso in precedenza da uno dei contributori (grazie) in modo che l'utente possa scegliere quale file di dati (.jmp) aprire:
Names Default To Here( 1 );
// Open a dialog to choose a .jmp file to open
// Get the filename of the .jmp file to open
dt = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( dt ),
Throw(),
// Else Open the selected file
Open( dt )
);
// Get all of the numeric column's names
colNameList = dt << get column names( string, continuous );
// Take the data from rows 1 & 2 and create the Spec Limits column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Run the Distribution Platform
dt << Distribution( column( eval(colNameList) ));Durante l'esecuzione dello script, ho riscontrato il seguente errore:
Invia prevede un oggetto scriptabile nell'accesso o nella valutazione di 'Invia', dt << /*###*/ottiene i nomi delle colonne (string, continue) /*###*/
Sembra che ci sia un problema con il dt << ottieni i nomi delle colonne?
Ho anche allegato una copia del file di dati che vorrei elaborare. La prima e la seconda riga di dati sono rispettivamente LSL e USL, che non voglio includere come parte dei dati. Ma vengono piuttosto utilizzati per tracciare le linee LSL e USL nel grafico della distribuzione.
Apprezzo qualsiasi aiuto da parte della comunità. Grazie!
Automazione e scriptingRi: Errore nell'esecuzione dello script - Invia prevede un oggetto scriptabile nell'accesso o nella valutazione di 'Invia', dt << /*###*/ottieni i nomi delle colonne (stringa, continuo) /*###*/Ciao Jim,
Grazie mille per avermi guidato in questo viaggio!
Ri: Errore nell'esecuzione dello script - Invia prevede un oggetto scriptabile nell'accesso o nella valutazione di 'Invia', dt << /*###*/ottieni i nomi delle colonne (stringa, continuo) /*###*/Sì, tutto ciò che deve essere fatto è eseguire il loop dell'output e regolare ciascuno degli assi. Vedi sotto
names default to here(1);
// Get the filename of the .jmp file to open
dt = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( dt ),
Throw(),
// Else Open the selected file
dt = Open( dt )
);
// Get all of the numeric column's names
colNameList = dt << get column names( string, continuous );
// Take the data from rows 1 & 2 and create the Spec Limits column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude(1);
// Run the Distribution Platform
dist = dt << Distribution( column( eval(colNameList) ));
// Loop across the output and addjust the axes
rdist = dist << report;
For Each( {col, i}, colNameList,
offset = (Column( col )[2] - Column( col )[1]) * .1;
myMin = Column( col )[1] - offset;
myMax = Column( col )[2] + offset;
// Adjust Min and Max Y-axis
rdist[axis box( i )] << Min( myMin ) << Max( myMax );
);Ri: Errore nell'esecuzione dello script - Invia prevede un oggetto scriptabile nell'accesso o nella valutazione di 'Invia', dt << /*###*/ottieni i nomi delle colonne (stringa, continuo) /*###*/Sembrerà che avrò bisogno di una sorta di loop tale che le impostazioni degli assi vengano applicate a tutti i grafici di distribuzione?
Ri: Errore nell'esecuzione dello script - Invia prevede un oggetto scriptabile nell'accesso o nella valutazione di 'Invia', dt << /*###*/ottieni i nomi delle colonne (stringa, continuo) /*###*/Hai fatto un piccolo progresso modificando lo script nel seguente:
// Get the filename of the .jmp file to open
dt = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( dt ),
Throw(),
// Else Open the selected file
dt = Open( dt )
);
// Get all of the numeric column's names
colNameList = dt << get column names( string, continuous );
// Take the data from rows 1 & 2 and create the Spec Limits column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Adjust Min and Max Y-axis
//dist = dt << Set Axis(
// Min( -10 ),
// Max( 10 )
//);
// Run the Distribution Platform
dist = dt << Distribution( column( eval(colNameList) ));
// Adjust Min and Max Y-axis
rdist = dist << report;
axisbox = rdist[axis box( 1 )];
axisbox << Min( 0 );Con la modifica sono riuscito a portare il Min della prima tabella di distribuzione su "0" ma il resto delle modifiche è rimasto invariato. Posso sapere come dovrei modificare il codice in modo che l'impostazione Min possa essere applicata a tutti i grafici?
Ri: Errore nell'esecuzione dello script - Invia prevede un oggetto scriptabile nell'accesso o nella valutazione di 'Invia', dt << /*###*/ottieni i nomi delle colonne (stringa, continuo) /*###*/La sintassi per impostare il valore Max per l'Asse non lo è
dist = dt << Set Axis(
Min( -10 ),
Max( 10 )
);
L'indice di scripting per modificare le impostazioni per un AxisBox() è mostrato di seguito

L'esempio JSL mostra la sintassi corretta da utilizzare
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
axisbox = rbiv[axis box( 1 )];
axisbox << Max( 120 );
Ecco una leggera modifica della sintassi di esempio, in cui l'impostazione dell'asse è per un grafico dell'istogramma, simile a quello che hai indicato di voler utilizzare nel tuo script.
// Run the Distribution Platform
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dist = dt << Distribution( column( :weight ));
rdist = dist << report;
axisbox = rdist[axis box( 1 )];
axisbox << Max( 200 ) << Min( 50 );
È possibile ottenere ulteriori informazioni sulla manipolazione dell'output di visualizzazione nella sezione della Guida allo scripting sugli alberi di visualizzazione.
Ri: Errore nell'esecuzione dello script - Invia prevede un oggetto scriptabile nell'accesso o nella valutazione di 'Invia', dt << /*###*/ottieni i nomi delle colonne (stringa, continuo) /*###*/Ho aggiunto le seguenti righe per vedere se riesco a far sì che i grafici di distribuzione modifichino il massimo e il minimo dei loro assi Y:
// Adjust Min and Max Y-axis
dist = dt << Set Axis(
Min( -10 ),
Max( 10 )
);
Sembra che non ci siano effetti. Sto sbagliando?
La sceneggiatura completa:
// Get the filename of the .jmp file to open
dt = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( dt ),
Throw(),
// Else Open the selected file
dt = Open( dt )
);
// Get all of the numeric column's names
colNameList = dt << get column names( string, continuous );
// Take the data from rows 1 & 2 and create the Spec Limits column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Adjust Min and Max Y-axis
dist = dt << Set Axis(
Min( -10 ),
Max( 10 )
);
// Run the Distribution Platform
dist = dt << Distribution( column( eval(colNameList) ));Ri: Errore nell'esecuzione dello script - Invia prevede un oggetto scriptabile nell'accesso o nella valutazione di 'Invia', dt << /*###*/ottieni i nomi delle colonne (stringa, continuo) /*###*/È facile da fare. Cerca nello Scripting Index e guarda i messaggi disponibili per l'oggetto AxisBox. È possibile impostare i valori Min e Max. Nell'indice sono presenti esempi che illustrano il JSL.
Ri: Errore nell'esecuzione dello script - Invia prevede un oggetto scriptabile nell'accesso o nella valutazione di 'Invia', dt << /*###*/ottieni i nomi delle colonne (stringa, continuo) /*###*/Ho sentito che hai detto che una volta inserita la funzione Show() nello script, JMP regolerà il massimo e il minimo dell'asse per tenere conto di tutti i punti dati e di LSL e USL.
Ma diciamo che se voglio definire manualmente Max e Min (usando le formule che ho menzionato prima) tramite lo script, è fattibile?
Ri: Errore nell'esecuzione dello script - Invia prevede un oggetto scriptabile nell'accesso o nella valutazione di 'Invia', dt << /*###*/ottieni i nomi delle colonne (stringa, continuo) /*###*/Una volta impostate le proprietà della colonna Limiti specifica e specificato l'elemento Mostra(1), per impostazione predefinita, JMP modificherà i valori dell'asse per ciascun grafico, per includere tutti i punti dati e tutti i limiti specificati.

Ri: Errore nell'esecuzione dello script - Invia prevede un oggetto scriptabile nell'accesso o nella valutazione di 'Invia', dt << /*###*/ottieni i nomi delle colonne (stringa, continuo) /*###*/Grazie per la tua chiara spiegazione Capisco cosa intendevi quando hai detto che dt originariamente assumeva il nome del percorso e del nome file, il che lo rende quindi inutilizzabile quando ho provato a ottenere i nomi delle colonne. Dovrei quindi eseguire:
dt = Open( dt )
In modo che la tabella dati venga caricata con i dati appropriati dal file per una corretta elaborazione.
Posso anche chiederti se vorrei che lo script regolasse i singoli Massimi e Minimi degli assi Y di ciascun grafico, come posso farlo?
Vorrei trovare l'intervallo assoluto tra USL e LSL, quindi inserire Max Y nell'intervallo USL + 0,1*, Min Y come intervallo LSL-0,1*. L'idea è quella di avere una presentazione coerente per i grafici di distribuzione.
Ri: Errore nell'esecuzione dello script - Invia prevede un oggetto scriptabile nell'accesso o nella valutazione di 'Invia', dt << /*###*/ottieni i nomi delle colonne (stringa, continuo) /*###*/La variabile "dt" è il problema. Lo stai utilizzando nel Pick File() come risultato della scelta. Avrà quindi il valore del percorso e del nome del file che si desidera aprire, ad esempio
"C:\Documenti\miofile.jmp"
Questo è molto appropriato per la tua funzione Open(),
Open( dt )
poiché la funzione Open() deve avere il percorso e il nome del file.
Tuttavia, dopo aver aperto la tabella dati, "dt" viene utilizzato come oggetto del messaggio, ottieni i nomi delle colonne()
colNameList = dt << get column names( string, continuous );
Il messaggio get colonna nomi() deve essere applicato a una tabella di dati, non a un percorso e a un nome di file.
Il tuo JSL verrà eseguito se cambi la chiamata alla funzione Open() in
dt = Open( dt )
La variabile verrà modificata per assumere il valore
Tabella dati ("il nome della tabella dati")
che sarà il modulo necessario per il resto del tuo JSL