JMP-Skriptfehler nur bei großer Tabelle: Maximale Länge von Arrays?Hallo JMP-Community,
Mit dem folgenden Skript, das hervorragend für Tabellen mit ~ 500 Spalten geeignet ist, bin ich bei der Verwendung für eine große Tabelle mit 20.000 Spalten auf ein seltsames Problem gestoßen: Im Wesentlichen scheint das Skript normal abzuschließen, wobei die Ausgabetabelle wie gewünscht erstellt wird Die Werte sind ziemlich zufällig (manuell überprüft).
Irgendwelche Hinweise auf das, was passiert? Ich habe die Vermutung, dass dies auf einen Speicherzuordnungsfehler zurückzuführen sein könnte, weil die maximale Länge der Arrays überschritten wurde, die ich zum Sammeln der Daten verwende.
Hinweis: Ich kann die große Tabelle, an der ich gerade arbeite, aufgrund der Vertraulichkeit der Daten nicht freigeben
Vielen Dank,
Names Default to Here (1);
dt = Current Data Table ();
m = {};
m1 = [];
m2 = [];
m3 = [];
m4 = [];
For (i = 12 , i <= N Col (dt),i++,
mv = Multivariate(
Y( :BIOMARKER, column(i) ),
Estimation Method( "Row-wise" ),
Scatterplot Matrix(
Density Ellipses( 1 ),
Shaded Ellipses( 0 ),
Ellipse Color( 3 )
),
Spearman's ρ( 1 ),
Kendall's τ( 1 )
);
mvr = mv << report;
insert into (m, Column Name (i));
m1 = m1 || ((mvr [Outline Box (1)] [Number Col Box (1)])<< get) [1];
m2 = m2 || ((mvr [Outline Box (1)] [Number Col Box (2)])<< get) [1];
m3 = m3 || ((mvr [Outline Box (1)] [Number Col Box (3)])<< get) [1];
m4 = m4 || ((mvr [Outline Box (1)] [Number Col Box (4)])<< get) [1];
mv << close window;
);
New Table ("Non-Parametric Correlation",
New column ("Symbol", character, set values (m)),
New column ("Spearman Rho", numeric, set values (m1)),
New column ("Spearman p", numeric, set values (m2)),
New column ("Kendall Tau", numeric, set values (m3)),
New column ("Kendal p", numeric, set values (m4)),
);Betreff: JMP-Skriptfehler nur bei großer Tabelle: Maximale Länge von Arrays?Versuche dies:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Body Measurements.jmp");
dt_out = New Table("Non-Parametric Correlation",
Add Rows(N Col(dt)),
New Column("Symbol", character),
New Column("Spearman Rho", numeric),
New Column("Spearman p", numeric),
New Column("Kendall Tau", numeric),
New Column("Kendal p", numeric),
Invisible
);
r = 1;
For(i = 2, i <= N Col(dt), i++,
m = [];
mv = dt << Multivariate(
Y(:Mass, Column(i)),
Estimation Method("Row-wise"),
Scatterplot Matrix(0),
Spearman's ρ(1),
Kendall's τ(1)
);
mob = Report(mv)[Outline Box(1)];
Column(dt_out, 1)[r] = Column(dt, i) << get name;
For(c = 2, c <= 5, c++,
Column(dt_out, c)[r] = (mob[Number Col Box(c - 1)] << get)[1];
);
mv << close window;
r++;
);
dt_out << show window(1);Betreff: JMP-Skriptfehler nur bei großer Tabelle: Maximale Länge von Arrays?Vielen Dank für eine elegante Lösung meines Problems.
Ich habe es gerade an meinen Daten getestet (nachdem ich die Datentabelle und die feste Variable ersetzt hatte) und es wurde eine Fehlermeldung (Debugger) ausgegeben: Invalid Argument in der Zeile
dt_out<SPAN class="token punctuation">[</SPAN>r<SPAN class="token punctuation">,</SPAN> <SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator">=</SPAN> <SPAN class="token function">Column Name</SPAN><SPAN class="token punctuation">(</SPAN>i<SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
Ich denke, dieser Befehl oder diese Syntax ist nicht mit JMP 11.1 kompatibel: Was wäre die beste Lösung?
Betreff: JMP-Skriptfehler nur bei großer Tabelle: Maximale Länge von Arrays?Nicht sicher was passiert. Es funktioniert möglicherweise besser, wenn die Ausgabetabelle inkrementell aufgefüllt wird, anstatt alle Daten in großen Listen / Matrizen zu erfassen.
Ein Beispiel (JMP 13):
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Body Measurements.jmp");
dt_out = New Table("Non-Parametric Correlation",
Add Rows(N Col(dt)),
New Column("Symbol", character),
New Column("Spearman Rho", numeric),
New Column("Spearman p", numeric),
New Column("Kendall Tau", numeric),
New Column("Kendal p", numeric),
Invisible
);
r = 1;
For(i = 2, i <= N Col(dt), i++,
m = [];
mv = dt << Multivariate(
Y(:Mass, Column(i)),
Estimation Method("Row-wise"),
Scatterplot Matrix(0),
Spearman's ρ(1),
Kendall's τ(1)
);
mob = Report(mv)[Outline Box(1)];
m ||= mob[Number Col Box(1)] << get as matrix;
m ||= mob[Number Col Box(2)] << get as matrix;
m ||= mob[Number Col Box(3)] << get as matrix;
m ||= mob[Number Col Box(4)] << get as matrix;
mv << close window;
dt_out[r, 1] = Column Name(i);
dt_out[r, 2 :: 5] = m;
r++;
);
dt_out << show window(1);
Betreff: JMP-Skriptfehler nur bei großer Tabelle: Maximale Länge von Arrays?Bei den meisten JMP-Plattformen werden einige Details hinzugefügt (z. B. Verteilung, Partition usw.) verwenden bei der Verarbeitung mehrere Kerne. Der JSL-Code ist ein einzelner Prozessor, aber die Multivarate-Plattform verwendet alle Prozessoren, auf die er zugreifen kann.
Betreff: JMP-Skriptfehler nur bei großer Tabelle: Maximale Länge von Arrays?Hallo Uday,
Vielen Dank.
Ich habe gerade versucht, dasselbe Skript auszuführen, ohne dass eine andere Anwendung im Hintergrund ausgeführt wurde, und es hat gut funktioniert. Es sieht also so aus, als hätte es eine Art Speicherüberlauf gegeben, obwohl laut Task-Manager (Windows 10) 2 GB RAM frei waren.
Betreff: JMP-Skriptfehler nur bei großer Tabelle: Maximale Länge von Arrays? @sornasst .
Ich weiß nicht, wie viel Hilfe das leisten würde, aber können Sie Ihre System-RAM-Details hier teilen? Ich glaube nicht, dass JMP auf einem Multi-Core läuft. Wenn Sie also auf einem Single-Core laufen, kann RAM dies unterstützen?