JMP Pro 12.2 Fehler bei Zugriffsverletzung (Skript enthalten)Ich versuche, einen benutzerdefinierten Bericht zum Anzeigen verschiedener Daten zu erstellen, der die Defektdichte verschiedener Tools vergleicht. Ich kann manchmal viele (mehr als 20) Werkzeuge zur Anzeige haben, was zu Verwechslungen mit den Spline-Passungen führt. Ich habe eine Möglichkeit gefunden, den Spline hervorzuheben, wenn das Werkzeug über die Legende ausgewählt wird, die Funktion führt jedoch zu zeitweiligen Abstürzen bei JMP.
Hier ist ein Skript, das den Fehler reproduzieren kann, aber es ist intermittierend. Wählen Sie einfach verschiedene Elemente der Legende aus und deaktivieren Sie alle Elemente mit
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;
)
)
);
Kann ich irgendetwas tun, um diesen Fehler nicht auftreten zu lassen? Ich habe die anfängliche Wait-Funktion hinzugefügt - es scheint ein Problem zu sein, wenn die Legendenauswahl die nicht ausgewählten Marker ändert (ich habe, dass nicht ausgewählte Marker ausgeblendet sind), und vielleicht versucht meine Funktion auch, die Anzeige während eines alternativen Updates zu ändern. Durch die Erhöhung der Wartezeit scheint der Fehler weniger häufig zu sein, die Situation wird jedoch nicht vollständig gemildert.
Vielen Dank!
Betreff: JMP Pro 12.2 Fehler bei Zugriffsverletzung (Skript enthalten)Der technische Support von JMP hat einen Fehler für dieses Problem entdeckt und erwartet, dass er in einer zukünftigen Version von JMP behoben wird.
Betreff: JMP Pro 12.2 Fehler bei Zugriffsverletzung (Skript enthalten)Danke für all die Hilfe! Ich konnte Ihre Vorschläge dazu verwenden, die Elemente nicht zu löschen und das Skript fehlerfrei arbeiten zu lassen. Ich mag es nicht, die Elemente zu löschen, aber ich wusste nicht, wie man sie praktisch versteckt.
Hier ist mein ursprüngliches Skript so modifiziert, dass es vollständig funktioniert.
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 ) ) );
)
)
);Betreff: JMP Pro 12.2 Fehler bei Zugriffsverletzung (Skript enthalten)Ich möchte hinzufügen, dass das Löschen von Inhalten aus einem Plattformbericht häufig zu Problemen führen kann. Ich würde vorschlagen:
- Verwenden Sie eine Plattformoption, falls vorhanden - so hat es Georgien gemacht
ow << Means and Std Dev(0);
- Wenn keine Plattformoptionen verfügbar sind, können Sie das verwenden Kasten << Sichtbarkeit ("Minimieren") Nachricht statt zu löschen. Dies verhält sich ähnlich wie ein IfBox () Überspringen Sie Teile des Berichts für Layout und Zeichnung.
Neben dem Vermeiden des Absturzes besteht ein Vorteil dieser Ansätze darin, dass sie in Skripts gespeichert werden. Wenn Sie eine Ihrer Plattformen interaktiv ändern und "Skript für Skriptfenster speichern" verwenden, werden die Anpassungen in das Skript aufgenommen. Dies kann auch wichtig sein, wenn Sie Filter hinzufügen möchten, wodurch sich auch die Plattformen aus dem Skript regenerieren.
Betreff: JMP Pro 12.2 Fehler bei Zugriffsverletzung (Skript enthalten)Ich konnte die Zugriffsverletzung reproduzieren und schickte den Bericht mit dem Skript und der Blogreferenz an JMP.
Ich habe M ausgewählt, dann habe ich F ausgewählt und wurde abgeladen.
Ich stimme David zu.
Ich habe eine seltsame Syntax gefunden, ein paar Skriptänderungen vorgenommen und ein paar Kommentare dazu gemacht:
Ich habe eine Änderung Ihres Skripts und eines einfacheren Skripts angehängt, das zuvor veröffentlicht wurde. Es verwendet die Legende und eine Übersichtstabelle und einen Rowstate-Handler. Die nicht ausgewählten Splines werden nicht wie in Ihrem Skript "ausgeblendet".
Ich kann nicht garantieren, dass die Zugriffsverletzung nicht auftritt. Antworten, falls es noch auftritt.
Betreff: JMP Pro 12.2 Fehler bei Zugriffsverletzung (Skript enthalten)Ich konnte die Zugriffsverletzung (mit oder ohne Wartezeit) nicht reproduzieren. Ich habe es mit verschiedenen Versionen einschließlich 12.2 probiert.
Bei diesem Problem würde ich den Code umgestalten. Meiner Ansicht nach ist insbesondere die Funktion "Neues Fenster" zum Rendern von Anzeigefeldern erforderlich, und obwohl JMP das Einfügen von JSL tolerieren kann, ist dies hässlich, nicht notwendig und möglicherweise problematisch. So würden zum Beispiel alle an den Biv-Bericht gesendeten Nachrichten nach der Definition des neuen Fensters erfolgen.