只有大表的JMP腳本錯誤:最大數組長度?你好JMP社區,
使用下面的腳本,這對於包含~500列的表非常有用,在使用20,000列的大型表上使用它時遇到了一個奇怪的問題:本質上,腳本似乎正常完成,根據需要生成輸出表但是實際值幾乎是隨機的(手動驗證)。
關於可能發生的事情的任何線索?我有一種預感,這可能是由於超出我用來收集數據的數組的最大長度導致的內存分配錯誤。
注意:由於數據的機密性,我無法共享我正在處理的大表
謝謝,
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:只有大表的JMP腳本錯誤:最大陣列長度?試試這個:
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:只有大表的JMP腳本錯誤:最大陣列長度?感謝您對我的問題的優雅解決方案。
我剛剛在我的數據上測試了它(在替換了數據表和固定變量之後)並且它返回了一條錯誤消息(調試器):該行的參數無效
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>
我猜這個命令或語法與JMP 11.1不兼容:最好的解決方法是什麼?
Re:只有大表的JMP腳本錯誤:最大陣列長度?不確定發生了什麼。如果逐步填充輸出表而不是收集大列表/矩陣中的所有數據,它可能會更好。
一個例子(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:只有大表的JMP腳本錯誤:最大陣列長度?添加一些細節,大多數JMP平台,(即 分發,分區等)在處理中使用多個核心。 JSL代碼是單處理器,但Multivarate平台將使用它可以獲得的所有處理器。
Re:只有大表的JMP腳本錯誤:最大陣列長度?你好Uday,
謝謝。
我只是嘗試運行相同的腳本,沒有其他應用程序在後台運行,它工作正常。所以它看起來可能是某種內存溢出,即使根據任務管理器(Windows 10)我有2 GB RAM可用。
Re:只有大表的JMP腳本錯誤:最大陣列長度? @sornasst ,
我不知道這會有多大幫助,但你可以在這里分享你的系統RAM細節嗎?我不認為JMP在多核上運行,所以假設它運行在單核上,你能不能支持這個?