Errore di violazione di accesso di JMP Pro 12.2 (script incluso)Sto cercando di creare un rapporto personalizzato per visualizzare vari dati che confrontino la densità dei difetti con vari strumenti. A volte posso avere molti (più di 20) strumenti da visualizzare, causando confusione con gli accoppiamenti spline. Ho trovato un modo per enfatizzare la spline quando lo strumento è selezionato tramite la legenda, ma la funzione causa arresti intermittenti su JMP.
Ecco uno script in grado di riprodurre l'errore, ma è intermittente: è sufficiente selezionare vari elementi della legenda e anche deselezionare tutti gli elementi usando
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Consumer Preferences.jmp" );
dt << Color or Mark by Column( "Gender" );
change_lines = Function( {table, ns},
{default local},
Wait( 0.1 );
If( ns:nit > 1,
If( Is Scriptable( ns:dla ),
sd = ns:dla << Summary( Group( Column( ns:dla, ns:tool ) ), "Private" );
Current Data Table( sd );
sm = 0;
For( k = 1, k <= ns:nit, k++,
sm += Selected( Row State( k ) )
);
For( i = 1, i <= ns:nit, i++,
c = Color To HLS( Color Of( Row State( i ) ) );
s = Selected( Row State( i ) );
If( Is Scriptable( c ) & N Items( c ) == 3,
If( sm != 0,
If( s == 1,
ns:biv << (Curve[i] << Line Color( HLS Color( c[1], 0.5 - 0.5 * c[2], c[3] ) ) << Line Width( 4 )),
ns:biv << (Curve[i] << Line Color( HLS Color( c[1], 0.5 + 0.5 * c[2], c[3] ) ) << Line Width( 1 ))
),
ns:biv << (Curve[i] << Line Color( HLS Color( c[1], c[2], c[3] ) ) << Line Width( 3 ))
)
);
);
Close( sd, nosave );
)
);
);
New Window( "Explore the SegFault",
Outline Box( "Bivariate and Oneway",
H List Box(
biv = Bivariate(
Y( :Name( "Salary" ) ),
X( :Name( "Birth Year" ) ),
SendToReport( Dispatch( {}, "Bivar Plot", FrameBox, {Frame Size( 400, 300 ), Marker Size( 3 )} ) )
);
biv << Group By( "Gender" );
biv << Fit Spline( 1, standardized );
bivr = biv << Report();
bivr[Outline Box( 1 )] << Set Title( "Salary vs. Birth Year" );
bivr[Picture Box( 2 )] << Delete;
N = N Items( Associative Array( Column( dt, "Gender" ) ) << Get Keys );
For( i = 1, i <= N, i++,
biv << (Curve[i] << Report( 0 ))
);
biv;,
ow = Oneway(
Y( :Name( "Salary" ) ),
X( :Name( "Gender" ) ),
All Graphs( 0 ),
Means and Std Dev( 1 ),
Plot Quantile by Actual( 1 ),
Line of Fit( 0 ),
Box Plots( 1 ),
Mean Error Bars( 1 ),
Std Dev Lines( 1 ),
Connect Means( 1 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Points Spread( 1 ),
SendToReport(
Dispatch(
{"Normal Quantile Plot"},
"Oneway QuantilePlot",
FrameBox,
{Frame Size( 350, 300 ), Marker Size( 3 ), Row Legend(
Column( dt, "Gender" ),
Marker( 1 ),
Marker Theme( "Paired" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
)
)
);
owr = ow << Report();
owr[Table Box( 1 )] << Set Selectable Rows();
owr[Outline Box( 1 )] << Set Title( "Proability Plot" );
legend = owr[String Col Box( 2 )];
legend << Sib Append( Number Col Box( "Mean", owr[Number Col Box( 2 )] << Get ) );
legend << Sib Append( Number Col Box( "Number", owr[Number Col Box( 1 )] << Get ) );
owr[Lineup Box( 1 )] << delete;
owr[Picture Box( 3 )] << delete;
owr[Outline Box( 2 )] << delete;
owr[Outline Box( 2 )] << Set Title( "" );
ns = New Namespace();
ns:nit = N;
ns:dla = dt;
ns:tool = "Gender";
ns:biv = biv;
owr[Number Col Box( 2 )] << Set Row Change Function( Function( {this}, change_lines( this, ns ) ) );
ow;
)
)
);
C'è qualcosa che posso fare per non avere questo errore? Ho incluso la funzione di attesa iniziale: sembra essere un problema con la selezione della legenda che cambia i marcatori non selezionati (ho i marcatori non selezionati sbiaditi) e forse la mia funzione sta anche cercando di cambiare la visualizzazione durante un aggiornamento alternativo. Aumentare il tempo di attesa sembra rendere l'errore meno frequente, ma non alleviare completamente la situazione.
Grazie!
Re: JMP Pro 12.2 Errore di violazione di accesso (script incluso)Il supporto tecnico JMP ha aperto un difetto per questo problema e si aspetta che sia risolto in una versione futura di JMP.
Re: JMP Pro 12.2 Errore di violazione di accesso (script incluso)Grazie per tutto l'aiuto! Sono stato in grado di accettare i tuoi suggerimenti su non eliminare gli elementi e far funzionare lo script senza errori. Non mi piaceva cancellare gli elementi, ma non sapevo del modo pratico per nasconderli.
Ecco il mio script originale modificato in modo che funzioni completamente.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Consumer Preferences.jmp" );
dt << Color or Mark by Column( "Gender" );
change_lines = Function( {table, ns},
{default local},
flag = 0;
lst = As List( table << Get Selected Rows() );
For( i = 1, i <= ns:nit, i++,
c = Color To HLS( Color Of( Column( ns:rs, "rsd" )[i] ) );
If( N Items( As List( Loc( lst, i ) ) ) == 0,
ns:biv << (Curve[i] << Line Color( HLS Color( c[1], 0.5 + 0.5 * c[2], c[3] ) ) << Line Width( 1 )),
ns:biv << (Curve[i] << Line Color( HLS Color( c[1], 0.5 - 0.5 * c[2], c[3] ) ) << Line Width( 4 ));
flag = 1;
);
);
If( flag == 0,
For( i = 1, i <= ns:nit, i++,
c = Color To HLS( Color Of( Column( ns:rs, "rsd" )[i] ) );
ns:biv << (Curve[i] << Line Color( HLS Color( c[1], c[2], c[3] ) ) << Line Width( 3 ));
)
);
);
New Window( "Explore the SegFault",
Outline Box( "Bivariate and Oneway",
H List Box(
ns = New Namespace();
ns:biv = Bivariate(
Y( :Name( "Salary" ) ),
X( :Name( "Birth Year" ) ),
SendToReport( Dispatch( {}, "Bivar Plot", FrameBox, {Frame Size( 400, 300 ), Marker Size( 3 )} ) )
);,
ns:ow = Oneway(
Y( :Name( "Salary" ) ),
X( :Name( "Gender" ) ),
All Graphs( 0 ),
Means and Std Dev( 1 ),
Plot Quantile by Actual( 1 ),
Line of Fit( 0 ),
Box Plots( 1 ),
Mean Error Bars( 1 ),
Std Dev Lines( 1 ),
Connect Means( 1 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Points Spread( 1 ),
SendToReport(
Dispatch(
{"Normal Quantile Plot"},
"Oneway QuantilePlot",
FrameBox,
{Frame Size( 350, 300 ), Marker Size( 3 ), Row Legend(
Column( dt, "Gender" ),
Marker( 1 ),
Marker Theme( "Paired" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
)
)
);
ns:owr = ns:ow << Report();
ns:owr[Table Box( 1 )] << Set Selectable Rows();
ns:owr[Outline Box( 1 )] << Set Title( "Proability Plot" );
legend = ns:owr[String Col Box( 2 )];
legend << Sib Append( Number Col Box( "Mean", ns:owr[Number Col Box( 2 )] << Get ) );
legend << Sib Append( Number Col Box( "Number", ns:owr[Number Col Box( 1 )] << Get ) );
ns:owr[Lineup Box( 1 )] << delete;
ns:owr[Picture Box( 3 )] << delete;
ns:owr[Outline Box( 2 )] << delete;
ns:owr[Outline Box( 2 )] << Set Title( "" );
ns:dla = dt;
ns:tool = "Gender";
ns:biv = ns:biv;
ns:rs = ns:dla << Summary( Group( Column( ns:dla, ns:tool ) ), "Private" );
ns:rs << New Column( "rsd", Row State, Set Formula( Color State( Color Of( Row State() ) ) ) );
ns:nit = N Items( legend << Get );
ns:biv << group by( Column( ns:dla, ns:tool ) );
ns:biv << fit spline( 1, standardized );
ns:bivr = ns:biv << Report();
ns:bivr[Outline Box( 1 )] << Set Title( "Trend Chart" );
ns:bivr[Picture Box( 2 )] << Visibility( "Collapse" );
isdone = 0;
For( i = 1, i <= ns:nit, i++,
ns:biv << (Curve[i] << Report( 0 ));
ns:bivr[List Box( 4 + i )] << Visibility( "Collapse" );
);
ns:owr[Number Col Box( 2 )] << Set Row Change Function( Function( {this}, change_lines( this, ns ) ) );
)
)
);Re: JMP Pro 12.2 Errore di violazione di accesso (script incluso)Aggiungerò che l'eliminazione di contenuti da un report di piattaforma può spesso portare a problemi. Suggerirei:
- Usa un'opzione di piattaforma, se esiste - questo è ciò che ha fatto la Georgia
ow << Means and Std Dev(0);
- Quando le opzioni di piattaforma non sono disponibili, è possibile utilizzare il scatola << Visibilità ( "Collapse") messaggio invece di cancellare. Questo si comporta come un IfBox () nel saltare più parti del rapporto per il layout e il disegno.
Oltre a evitare il crash, un vantaggio di questi approcci è che saranno ricordati negli script. Se si modifica una delle piattaforme in modo interattivo e si utilizza la finestra Salva script in script, le personalizzazioni verranno incluse nello script. Questo potrebbe anche essere importante se si desidera aggiungere filtri, il che causerà la rigenerazione delle piattaforme dallo script.
Re: JMP Pro 12.2 Errore di violazione di accesso (script incluso)Sono stato in grado di riprodurre la violazione di accesso e inviato il rapporto a JMP con lo script e il riferimento del blog.
Ho selezionato M quindi ho selezionato F e sono stato scaricato.
Sono d'accordo con David.
Ho trovato qualche sintassi strana, ho apportato alcune modifiche allo script e ho un paio di commenti:
Ho allegato una modifica del tuo script e uno script più semplice, precedentemente pubblicato. Utilizza la legenda, una tabella di riepilogo e un gestore dello stato delle righe. Non "sbiadisce" le spline non selezionate come il tuo script.
Non posso garantire, la violazione di accesso non si verificherà. Rispondi, se si verifica ancora.
Re: JMP Pro 12.2 Errore di violazione di accesso (script incluso)Per quello che vale, non sono stato in grado di riprodurre la violazione di accesso (con o senza l'attesa). Ho provato con varie versioni compreso 12.2.
Se avessi riscontrato questo problema, avrei cercato di ridefinire il codice. In particolare, il mio punto di vista è che una funzione Nuova finestra dovrebbe essere usata per renderizzare le finestre di visualizzazione e mentre JMP potrebbe tollerare l'inserimento di JSL è brutto, non necessario e potenzialmente problematico. Quindi, ad esempio, tutti i messaggi inviati al rapporto biv farei dopo la definizione della nuova finestra.