錯誤:“表達式不適合可用的列類型”<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好,
在下面的程式碼中,我收到錯誤:“表達式不適合可用的列類型”,並且它發生在公式評估期間。
我只是想在添加新列時引用同一個表,例如減去我要添加新列的表中名為“dt”的兩列... 不明白為什麼它不起作用。
dt = myTable();
cols = dt << GetColumnNames("字串");
//等待(3);
For(c=1, c<=NItems(cols), c++,
如果( 開始於(列,「HTOL」),
dt << 新列(列|| “ Δ”,數字,連續,公式(評估清單(列(dt,4)) ) );
);
);
謝謝
傑夫
回覆:錯誤:“表達式不適合可用的列類型”謝謝PMroz! 我昨晚最終使用與你的非常相似的措辭解決了這個問題 - 我使用了這樣的東西:
我想我用了解析.. 我不記得我是否必須使用 eval ,我大約 60% 確定我使用了。
如果有人需要我,請回覆此內容,我會找到確切的語法。
dt << 新列( 解析(列|| " Δ")、數字、連續、公式(:^cols^ - :數據 0))
回覆:錯誤:“表達式不適合可用的列類型”與@stephen.pearson類似的技術:
dt =新表( “演示” ,新增行( 3 ) ,
新專欄( “數據0” ,數位,連續的,格式( “最好的” , 12 ) ,設定值( [ 1 , 2 , 3 ] ) ) ,
新專欄( “數據100” ,數位,連續的,格式( “最好的” , 12 ) ,設定值( [ 4 , 5 , 6 ] ) ) ,
新專欄( “數據200” ,數位,連續的,格式( “最好的” , 12 ) ,設定值( [ 7 , 8 , 9 ] ) )
) ;
列= dt <<取得列名( “細繩” ) ;
為了( C = 1 , C <=尼特姆斯(列) , C ++,
如果(以。。開始(大寫(列[ C ]) , “數據” ) ,
新列表達式=評估插入( "\[dt << 新列( 列|| “ Δ”,數字,連續,公式(:^列^ - :數據 0))]\") ;
評估(解析(新列表達式)) ;
) ;
) ;
回覆:錯誤:“表達式不適合可用的列類型”列(dt,c)不等於:數據100就公式而言。
使該程式碼正常運作的一種方法是使用動態 JSL,它在執行 JSL 之前對其進行評估。
// 不確定這是否是正確的語法,但你明白了
目標列 =列(dt,c)<<取得名稱(“字串”);
//動態替換進入if子句
評估(
解析(
評估插入(
“\[
dt << 新列(列|| “ delta”,數字,連續,公式(:^目標列^ - :資料 0 ) );
]\"
) ) );
如果您的列名稱中有特殊字符,您可能需要使用 :Name(" ^目標欄^ “) 在公式。 如果列名稱中存在 ^/-+* 符號,這仍然會產生奇怪的結果,因為公式無法可靠地計算。
回覆:錯誤:“表達式不適合可用的列類型”感謝您及時的回覆!!
我有一個表“dt”,其中包含資料列。它們可以是“數據 0”或“數據 100”或“數據 200”,最多可達某個未知數字。
無論該列被稱為什麼,我想從中減去“data 0”列 - 即使該列是“data 0”(以便該列全為零,但其他列如“data 100”並不全為零” 。
所以我試著有一個 for 迴圈來檢查每一列,例如,如果它被命名為“data 100”,我希望它自動建立一個“data 100 delta”列,其中包含公式:(data 100 - 資料0)。
我想我可以這樣做:
dt = myTable();
cols = dt << GetColumnNames("字串");
//等待(3);
For(c=1, c<=NItems(cols), c++,
如果( 開始於(列, “數據”),
dt << 新列(列|| “ delta”,數字,連續,公式(列(dt,c) - :資料 0 ) );
);
);
“:data 0”引用似乎有效 - 它將把“:data 0”資料複製到“data 100 delta”列中,但是如果我放入“column(dt,c)”,試圖獲取資料100列,出錯了.....
謝謝!!
回覆:錯誤:“表達式不適合可用的列類型”傑夫,
你是對的,問題是「eval list(column(dt,4))」。 Eval List() 期望有一個要評估的清單。例如:{1,2,3}。
這是你的意圖嗎? Column(dt, 4) 的內容是清單嗎? 由於該列中很可能有數值,因此會引發錯誤。
即使這樣,JMP 資料表列也只接受 3 種資料類型:數字、字元和行狀態。 如果 Column(4) 的每個單元格中確實都有列表,那麼它們實際上是字串。即「{1,2,3}」。 在這種情況下,首先必須解析字串以將其轉換為表達式,然後 EvalList() 才能運作。
問題是,你想要這個公式做什麼?