Erreur de script JMP avec une grande table uniquement: longueur maximale des tableaux?Bonjour la communauté JMP,
En utilisant le script ci-dessous, qui fonctionne très bien pour les tables d'environ 500 colonnes, j'ai rencontré un problème étrange lorsque je l'utilisais sur une grande table de 20 000 colonnes: le script semble se terminer normalement, produisant la table de sortie comme vous le souhaitez, mais le les valeurs sont plutôt aléatoires (vérifiées manuellement).
Un indice sur ce qui peut arriver? J'ai l'impression que cela pourrait être dû à une erreur d'allocation de mémoire due au dépassement de la longueur maximale des tableaux que j'utilise pour collecter les données.
Remarque: je ne peux pas partager la grande table sur laquelle je travaille en raison de la nature confidentielle des données.
Merci,
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)),
);Re: Erreur de script JMP avec une grande table uniquement: longueur maximale des tableaux?Essaye ça:
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);Re: Erreur de script JMP avec une grande table uniquement: longueur maximale des tableaux?Merci pour une solution élégante à mon problème.
Je viens de le tester sur mes données (après avoir remplacé la table de données et la variable fixe) et renvoyé un message d'erreur (débogueur): Argument non valide à la ligne
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>
Je suppose que cette commande ou cette syntaxe n'est pas compatible avec JMP 11.1: quel serait le meilleur moyen de contourner le problème?
Re: Erreur de script JMP avec une grande table uniquement: longueur maximale des tableaux?Pas sûr de ce qui se passe. Cela peut fonctionner mieux si vous remplissez progressivement la table en sortie au lieu de collecter toutes les données dans de grandes listes / matrices.
Un exemple (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);
Re: Erreur de script JMP avec une grande table uniquement: longueur maximale des tableaux?Ajoutant quelques détails, la plupart des plates-formes JMP (c'est-à-dire Distribution, Partition, etc.) utilisent plusieurs cœurs dans le traitement. Le code JSL est à processeur unique, mais la plate-forme multivarate utilisera tous les processeurs qu’elle peut obtenir.
Re: Erreur de script JMP avec une grande table uniquement: longueur maximale des tableaux?Salut uday
Merci.
J'ai juste essayé d'exécuter le même script sans aucune autre application en arrière-plan et cela a bien fonctionné. Donc, il semble que cela ait pu être une sorte de débordement de mémoire même si, selon le gestionnaire de tâches (Windows 10), j'avais 2 Go de RAM disponible.
Re: Erreur de script JMP avec une grande table uniquement: longueur maximale des tableaux? @sornasst ,
Je ne sais pas à quel point cela pourrait être utile, mais pouvez-vous partager les détails de votre RAM système ici? Je ne pense pas que JMP fonctionne sur plusieurs noyaux. Par conséquent, en supposant qu'il fonctionne sur un seul cœur, êtes-vous en mesure de prendre en charge cette RAM?