Errore di script JMP solo con una tabella di grandi dimensioni: Lunghezza massima di array?Ciao community JMP,
Usando lo script qui sotto, che funziona perfettamente per le tabelle con ~ 500 colonne, mi sono imbattuto in uno strano problema quando lo usavo su una grande tabella con 20.000 colonne: in sostanza, lo script sembra completare normalmente, producendo la tabella di output come desiderato ma il reale i valori sono piuttosto casuali (come verificato manualmente).
Qualche idea su cosa potrebbe accadere? Ho la sensazione che ciò potrebbe essere dovuto a un errore di allocazione della memoria dovuto al superamento della lunghezza massima degli array che utilizzo per raccogliere i dati.
Nota: non posso condividere la tabella di grandi dimensioni su cui sto lavorando a causa della natura riservata dei dati
Grazie,
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)),
);Ri: Errore di script JMP solo con una tabella grande: Lunghezza massima di array?Prova questo:
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);Ri: Errore di script JMP solo con una tabella grande: Lunghezza massima di array?Grazie per un'elegante soluzione al mio problema.
L'ho appena testato sui miei dati (dopo aver sostituito la tabella dei dati e la variabile fissa) e ha restituito un messaggio di errore (debugger): Argomento non valido sulla linea
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>
Immagino che questo comando o sintassi che non è compatibile con JMP 11.1: quale sarebbe il miglior lavoro in giro?
Ri: Errore di script JMP solo con una tabella grande: Lunghezza massima di array?Non sono sicuro di quello che sta succedendo. Potrebbe funzionare meglio se si compila in modo incrementale la tabella di output anziché raccogliere tutti i dati in elenchi / matrici di grandi dimensioni.
Un esempio (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);
Ri: Errore di script JMP solo con una tabella grande: Lunghezza massima di array?Aggiungendo alcuni dettagli, la maggior parte delle piattaforme JMP, (es Distribuzione, Partizione, ecc.) Utilizzano più core nell'elaborazione. Il codice JSL è a processore singolo, ma la piattaforma Multivarate utilizzerà tutti i processori di cui può disporre.
Ri: Errore di script JMP solo con una tabella grande: Lunghezza massima di array?Ciao Uday,
Grazie.
Ho appena provato a eseguire lo stesso script senza altre applicazioni in esecuzione in background e ha funzionato correttamente. Quindi sembra che potrebbe esserci stata una sorta di overflow della memoria anche se secondo il Task Manager (Windows 10) avevo 2 GB di RAM gratuiti.
Ri: Errore di script JMP solo con una tabella grande: Lunghezza massima di array? @sornasst ,
Non so quanto aiuto sarebbe, ma puoi condividere i dettagli della tua RAM di sistema qui? Non penso che JMP funzioni su multi core, quindi supponendo che sia eseguito su single core, la RAM è in grado di supportare questo?