Map Value函數:後續呼叫結果不一致你好,
我是 JMP 16 和 JSL 的新手,但我是一位經驗豐富的程式設計師。
由於某些原因,我想使用“映射值”功能,但這給了我錯誤的結果。
我想要實現的是從包含數字和字串的列表中刪除作為列表給出的不需要的項目
下列函數從 na_list 建構一個名為 na_values 的「Map Value」列表,其形式為 {option1, 0, option2, 0, ...},例如 {option1, option2 ,...}
並使用“Filter Each”和“Map Value”功能對其進行過濾。
wrap = function({filtered list,na_list}, {Default Local},
na_values={};For Each( {value}, na_list, na_values=Insert(na_values,value);na_values=Insert(na_values,1););
return(Filter Each({value}, filtered list, Map Value(value, na_values, Unmatched(0))==0;));
);但如果我使用其他參數再次呼叫該函數,則會給出錯誤的結果:
Show(wrap({"b",1, 2, 3},{"b"})); // <-- returns {1,2,3} => OK
Show(wrap({"d",1, 2, 3},{"d"})); // <-- returns {"d",1,2,3} => NOT OK, should be as above {1,2,3]
這裡有什麼問題嗎? JMP 中的錯誤? 我使用的是版本 16.0.0 (512257)。
此致,
湯瑪斯
消費者與市場研究數據探索和視覺化分享和交流成果視窗回覆:映射值函數:不同字元的錯誤結果JMP支援已經回答了我,這可能是我發現的缺陷。
他們的支援為我提供了以下解決方案來解決我最初的問題,即使用關聯數組函數從列表中刪除不需要的項目:
filtered list = {"b", 1, 2, 3};
na_list = {"b"};
result = Associative Array(filtered list) << Remove(Associative Array(na_list)) << Get Keys; // {1, 2, 3}回覆:映射值函數:不同字元的錯誤結果感謝您的回覆。 正如您所說,第一個呼叫有效,後續呼叫失敗。
我已就此問題致電我們的 JMP 支援人員,該支援人員已將此問題提交給其技術支援團隊。 如果我收到任何訊息,我會將其發佈在這裡。
回覆:映射值函數:不同字元的錯誤結果在你的例子中
Show(wrap({"b",1, 2, 3},{"b"}));
Show(wrap({"d",1, 2, 3},{"d"}));
沒有給出第二次調用的正確結果。
但這有效:
Show(wrap({"d",1, 2, 3},{"d"}));
這表明您不需要到處進行評估。
問題是第一次呼叫該函數有效,而後續呼叫失敗;這很奇怪。
回覆:映射值函數:不同字元的錯誤結果你好,你是對的,我從我的測試函數中刪除了 na_values 的初始化。
但如果我將 na_values 的初始化加入函數中,問題就存在:
wrap = function({filtered list,na_list}, {Default Local},
<STRONG>na_values={}</STRONG>;For Each( {value}, na_list, na_values=Insert(na_values,value);na_values=Insert(na_values,1););
return(Filter Each({value}, filtered list, Map Value(value, na_values, Unmatched(0))==0;));
);
Show(wrap({"b",1, 2, 3},{"b"})); // = {1, 2, 3}=> OK
Show(wrap({"d",1, 2, 3},{"d"})); // = {"d", 1, 2, 3} => Not OK ! => expected {1, 2, 3}請自己嘗試上面的程式碼。
回覆:映射值函數:不同字元的錯誤結果我不確定如果不先將 na_value 初始化為空列表,您如何讓函數正常工作。這有效:
names default to here(1);
filtered list = {"d",1, 2, 3};
na_list = {"d"};
na_values = {}; // <--- missing
For Each( {value}, na_list,
na_values=Insert(na_values,value);
na_values=Insert(na_values,1);
);
f = Filter Each({value}, filtered list,
Map Value(value, na_values, Unmatched(0))==0;
);
show(f);回覆:映射值函數:不同字元的錯誤結果有時,JMP / JSL 處理表達式的方式可能很奇怪 - 例如,在發送函數中,參數經常在未計算的情況下發送。雖然這裡沒有發送功能,但似乎在過濾每個()或者映射值()以奇怪的方式處理參數並奇怪地處理查找。
基本上,我不能說這是一個錯誤,但它看起來確實很奇怪。如果我是您,我會聯繫 JMP 支援並向他們展示第一通電話(無論是{"b",1,2,3"}或者{“d”,1,2,3} )有效,而第二個無效。可能這是一個錯誤。
這是一個解決方法:
wrap = Function( {filtered list, na_list},
{Default Local},
na_values = {};
For Each( {value}, na_list,
Insert Into( na_values, value );
Insert Into( na_values, 1 );
);
Eval( Eval Expr( Filter Each( {value}, filtered list, Map Value( value, Expr( na_values ), Unmatched( 0 ) ) == 0 ) ) );
);