Erreur de violation d'accès JMP Pro 12.2 (script inclus)J'essaie de créer un rapport personnalisé permettant d'afficher diverses données comparant la densité de défauts à partir de divers outils. Je peux parfois avoir de nombreux outils (plus de 20) à afficher, ce qui crée une confusion avec les ajustements des splines. J'ai trouvé un moyen de mettre en évidence la spline lorsque l'outil est sélectionné via la légende, mais la fonction provoque des plantages intermittents sur JMP.
Voici un script qui peut reproduire l'erreur, mais il est intermittent - sélectionnez simplement divers éléments de la légende et désélectionnez également tous les éléments à l'aide de .
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;
)
)
);
Y a-t-il quelque chose que je puisse faire pour que cette erreur ne se produise pas? J'ai inclus la fonction d'attente initiale - il semble y avoir un problème avec la sélection de la légende qui modifie les marqueurs non sélectionnés (les marqueurs non sélectionnés sont estompés) et peut-être que ma fonction tente également de modifier l'affichage lors d'une autre mise à jour. L'augmentation du temps d'attente semble rendre l'erreur moins fréquente, mais n'atténue pas complètement la situation.
Merci!
Objet: Erreur de violation d'accès JMP Pro 12.2 (script inclus)Le support technique JMP a ouvert un défaut pour ce problème et s’attend à ce qu’il soit résolu dans une version ultérieure de JMP.
Objet: Erreur de violation d'accès JMP Pro 12.2 (script inclus)Merci pour votre aide! J'ai pu suivre vos suggestions pour ne pas supprimer les éléments et faire en sorte que le script fonctionne sans erreur. Je n'aimais pas supprimer les éléments, mais je ne connaissais pas le moyen pratique de les cacher.
Voici mon script original modifié pour qu'il fonctionne pleinement.
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 ) ) );
)
)
);Objet: Erreur de violation d'accès JMP Pro 12.2 (script inclus)J'ajouterai que la suppression du contenu d'un rapport de plate-forme peut souvent entraîner des problèmes. Je voudrais suggerer:
- Utilisez une option de plate-forme si elle existe - c'est ce que la Géorgie a fait avec
ow << Means and Std Dev(0);
- Lorsque les options de plate-forme ne sont pas disponibles, vous pouvez utiliser le box << Visibilité ("Réduire") message au lieu de supprimer. Cela se comporte comme un IfBox () en sautant des portions du rapport pour la mise en page et le dessin.
En plus d'éviter le crash, l'un des avantages de ces approches est qu'elles seront mémorisées dans les scripts. Si vous modifiez une de vos plateformes de manière interactive et utilisez la fenêtre Enregistrer le script dans un script, les personnalisations seront incluses dans le script. Cela peut également être important si vous souhaitez ajouter des filtres, ce qui entraînera également la régénération des plates-formes à partir du script.
Objet: Erreur de violation d'accès JMP Pro 12.2 (script inclus)J'ai pu reproduire la violation d'accès et envoyé le rapport à JMP avec le script et la référence de blog.
J'ai sélectionné M puis j'ai sélectionné F et j'ai été vidé.
Je suis d'accord avec David.
J'ai trouvé une syntaxe étrange, apporté quelques modifications au script et quelques commentaires:
J'ai joint une modification de votre script et un script plus simple, précédemment posté. Il utilise la légende, un tableau récapitulatif et un gestionnaire d'état de rangée. Il ne "fade" pas les splines non sélectionnées comme l'a fait votre script.
Je ne peux pas garantir que la violation d'accès ne se produira pas. Répondez si cela se produit encore.
Objet: Erreur de violation d'accès JMP Pro 12.2 (script inclus)Pour ce que cela vaut, je n'ai pas été en mesure de reproduire la violation d'accès (avec ou sans attente). J'ai essayé avec différentes versions dont 12.2.
Si je rencontrais ce problème, je chercherais à refactoriser le code. En particulier, j’estime qu’une fonction de nouvelle fenêtre devrait être utilisée pour le rendu des zones d’affichage et, bien que JMP puisse tolérer l’insertion de JSL, il est moche, inutile et potentiellement problématique. Ainsi, par exemple, tous les messages envoyés au rapport biv que je ferais après la définition de la nouvelle fenêtre.