Scriptable[] 或“發送需要可編寫腳本的物件”你好,
我嘗試了多種方法來嘗試在預過濾表中選擇PM#=2 和Logistic#=1 的特定行,但我要么收到“Send Expects scriptable object”訊息,要么收到“Scriptable[]”訊息,然後收到「Scriptable[]」訊息腳本終止,或無限循環。有人可以幫助解決我無法對行選擇進行程式設計的語法不合適的問題嗎?謝謝!
lamstationfile=Pick File("choose file","$Documents" );
dt=Open(lamstationfile,
Import Settings(End Of Field( Tab ),Scan Whole File( 1 ), Column Names Start(7 ),Data Starts( 8),));
dt = Current Data Table();
//find data rows
w=NRow(dt);
dt<<SELECT where="">(d-1));
dt2=dt<<SUBSET>(d-1))<<DELETE rows=""></DELETE></SUBSET></SELECT>
回覆:Scriptable[] 或“發送需要可編寫腳本的物件”您附加的資料是一個文件,我無法開啟。
您能否只提供您嘗試使用的表的一小部分?
我能想到的原因之一是您的行選擇不起作用。
除了提供範例資料集之外,您可以嘗試一下嗎?
dt = 當前資料表();
然後運行您的選擇,其中 dt 是您正在使用的資料表。
如果 JMP 無法識別或遺失了對資料表的引用,那麼無論您採取何種方法,行選擇操作都將無法運作。回覆:Scriptable[] 或“發送需要可編寫腳本的物件”感謝您的答覆。 我認為打字錯誤只發生在我將程式碼轉移到線上討論時。 我的電腦上沒有錯字,否則我會得到一個不同的錯誤。 另外,方法#1、#3 和#4 也不適合我。 不知道為什麼。
@uday_guntupalli寫道:
dt3 <<選擇其中(:Column( dt3, clos ) == Num( logis ));
回覆:Scriptable[] 或“發送需要可編寫腳本的物件”我以為@uday_guntupalli程式碼應該可以工作,但是在 13.2.1 中卻不能(奇怪)。但是,使用 As Column() 而不是 Column() 可以讓您的特定程式碼正常運作
Names Default To Here( 1 );
dt3 = Open( "$SAMPLE_DATA/Big Class.jmp" );
logis = "55";
clos = "Height";
dt3 << Select Where( As Column( dt3, clos ) == Num( logis ) );
回覆:Scriptable[] 或“發送需要可編寫腳本的物件”dt3 <<選擇其中(:Column( dt3, clos ) == Num( logis )); // 開頭有拼字錯誤回覆:Scriptable[] 或“發送需要可編寫腳本的物件”抱歉,我應該說得更清楚。我遇到的問題是在創建第三個資料表 dt3 之後程式碼的結尾。最後一個活動程式碼行之前的所有內容都正常運作[取得第一個資料表 dt 中的行和列,設定輸入 PM#=2 和 Logistic#=1 都很好]。我只是無法選擇 dt3 中 Logistic# =1 的幾行。
我已經嘗試了幾種不同的方法,如下面的程式碼摘錄中所述,但我的程式碼要么以“Scriptable[]”註釋終止,要么“發送需要可編寫腳本的物件”錯誤。我不確定下面的程式碼中的哪裡阻止它正常運行。
<SPAN class="token comment">//dt3<<GET rows="" where="">
dt3<SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN>Selet Where<SPAN class="token punctuation">(</SPAN><SPAN class="token punctuation">:</SPAN><SPAN class="token function">Column</SPAN><SPAN class="token punctuation">(</SPAN> dt3<SPAN class="token punctuation">,</SPAN> clos <SPAN class="token punctuation">)</SPAN> <SPAN class="token operator">==</SPAN> <SPAN class="token function">Num</SPAN><SPAN class="token punctuation">(</SPAN> logis <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN> <SPAN class="token comment">//Method#2</SPAN>
<SPAN class="token comment">//For(i=1, i=NRows(dt3), i++, //Method#3</SPAN>
<SPAN class="token comment">//If( Column( dt3, clos )[i] == Num( logis ),</SPAN>
<SPAN class="token comment">// Column( dt3, clos )[i] << Set Selected( 1 )); );</SPAN>
<SPAN class="token comment">//For Each Row(If( :Column( dt3, clos ) == Num( logis ), :Column( dt3, clos ) << Set //Selected(1)); //Method#4</SPAN></GET></SPAN>
回覆:Scriptable[] 或“發送需要可編寫腳本的物件”這是一個涵蓋資料表中第一個問題的腳本,在找到「NUM_DATA_ROWS:
lamstationfile = Pick File( "choose file", "$Documents" );
dt = Open( lamstationfile, Import Settings( End Of Field( Tab ),
Scan Whole File( 1 ), Column Names Start( 7 ), Data Starts( 8 ), ) );
dt = Current Data Table();
//find data rows
w = N Row( dt );
dt << Select Where( :Time == "NUM_DATA_ROWS" ) << Label( 1 );
d = dt << Get Selected Rows;
Show( d );
// A matrix is returned from << Get Selected Rows, so you need to reference d[1]
dt << Select Where( Row() > (d[1] - 1) );
dt2 = dt << Subset( Selected Rows( 1 ), Selected columns only( 0 ) );
dt /*<< Select Where( Row() > (d - 1) )*/ << Delete Rows;
// Change first two columns to numeric data
Column( dt, 1 ) << Data Type( Numeric );
Column( dt, 1 ) << Modeling Type( "Continuous" );
Column( dt, 1 ) << format("hr:m:s");
Column( dt, 2 ) << Data Type( Numeric );
Column( dt, 2 ) << Modeling Type( "Continuous" );
關於選擇列然後進行子集化,我建議您使用內建的列選擇工具“Columns Viewer”,而不是建立自己的選擇工具。
dt << Columns Viewer;
回覆:Scriptable[] 或“發送需要可編寫腳本的物件”對不起。現在已正確附加資料。
回覆:Scriptable[] 或“發送需要可編寫腳本的物件”@asdf :
附件 (.zip) 檔案為空 - 因此未提供您的資料來測試您的程式碼並查看錯誤以進行故障排除。
在缺乏您正在使用的實際數據的情況下,讓我們來看看這個範例。
dt = Open( "$SAMPLE_DATA/Air Traffic.jmp" );
dt << Select Where(:Airline == "Delta" & :Event == "Arrive");
正如您所看到的 - 您可以選擇滿足兩個不同列上的兩個不同條件的行。
就你而言 - 如果PM#=2 和 Logistic#=1 引用 2 個不同的表 - 那麼您需要根據您想要的內容根據公共列連接這些表。
如果不是,請提供實際的樣本資料。