表達式列表我想建立一個看起來像這樣的列表。
LL = {parm1 = "x", value1 = 5, parm2 = "y", value2 = 3, ...}
長度可能會有所不同,所以我在循環中執行它並嘗試在變量名中使用循環索引。
但我很難創建該術語(例如 parm1)。
做這個的最好方式是什麼?
回复:表達式列表這是另一種方法。 類似於您的最終解決方案。
// LL = {parm1 = "x", value1 = 5, parm2 = "y", value2 = 3, ...}
// Assume parameters and value labels are sequential
parm_list = {"x", "y", "z"};
value_list = {5, 3, 1};
pval_list = {};
for (i = 1, i <= nitems(parm_list), i++,
one_parm = evalinsert("\[parm^i^ = "^parm_list[i]^"]\");
one_val = evalinsert("\[value^i^ = ^value_list[i]^]\");
insertinto(pval_list, parse(one_parm));
insertinto(pval_list, parse(one_val));
);
pval_list;回复:表達式列表在我看來,如果你願意,你真的可以做一個關聯數組或嵌套關聯數組的列表。 然後你不必解析字符串來創建你的數據結構,我發現它更容易閱讀(當你解析字符串來創建變量時,你失去了運行它們或鼠標懸停以查看它們的能力。 )
Names Default to here(1);
testparam1 = 1;
fitparam1 = 2;
Rsq1 = 3;
testparam2 = 4;
fitparam2 = 5;
Rsq2 = 6;
//list of associative arrays
Laa = {};
//param1 insert
insert into(Laa, associative array({"TestParam", "FitParam", "Rsq"}, Evallist({testparam1, fitparam1, Rsq1})) );
//param2 insert
insert into(Laa, associative array({"TestParam", "FitParam", "Rsq"}, Evallist({testparam2, fitparam2, Rsq2})) );
show(Laa[1]["TestParam"], Laa[2]["TestParam"]);
//nested associative arrays
Naa = associative array();
//param1 insert
Naa["name1"] = associative array({"TestParam", "FitParam", "Rsq"}, Evallist({testparam1, fitparam1, Rsq1}));
//param2 insert
Naa["name2"] = associative array({"TestParam", "FitParam", "Rsq"}, Evallist({testparam2, fitparam2, Rsq2}));
show(Naa["name1"]["FitParam"], Naa["name2"]["FitParam"]);
返回
Laa[1]["TestParam"] = 1;
Laa[2]["TestParam"] = 4;
Naa["name1"]["FitParam"] = 2;
Naa["name2"]["FitParam"] = 5;
嵌套的好處實際上只有在您期望順序會改變並且位置很重要時才存在。
回复:表達式列表我不會評價哪個最好。但我確實發現這兩個例子對於理解它是如何工作的很有用。
最後我的代碼看起來像這樣。注意:這不會按原樣運行,因為我沒有在這裡定義一些東西。
這是在索引為 k 的循環中。列表列表存儲所有結果。
LList = {};
插入(L列表,解析( “測試參數” ||字符(k)|| "=\!"" ||模式[k]|| “\!” )); // 測試參數名稱
插入(L列表,解析( “擬合參數” ||字符(k)|| "=\!"" ||dt統計[ 1 , 1 ]|| “\!” )); // 擬合參數名稱
插入(L列表,解析( “Rsq” ||字符(k)|| “=” ||字符(dt統計[ 1 , 3 ]))); // R平方
回复:表達式列表最好的方法?” 您是否想在 JMP 社區中發起戰鬥?
解決這個問題的方法不止一種。 關於哪種方式最好的決定取決於幾個標準。 這是另一個與 Jim 的解決方案不同但不一定更好的候選解決方案。
Names Default To Here( 1 );
// List the variable names
name list = { "Cool", "Awesome", "Bad" };
// List the variable values
value list = { 1, 2, 3 };
// Prepare an empty container for assignments
name value list = {};
// Make the list of assignments
For( i = 1, i <= N Items( name list ), i++,
// Start with function with no arguments
assign expr = Expr( Assign() );
// Add first argument
Insert Into( assign expr, name list[i] );
// Add second argument
Insert Into( assign expr, value list[i] );
// Add function to assignment list
Insert Into( name value list, Name Expr( assign expr ) );
);
Show( name value list );
現在你有一個選擇。 (我打賭你隨時都有機會。)你選擇。
回复:表達式列表這是生成列表的類似代碼
Names Default To Here( 1 );
dt = New Table( "Untitled 36", Add Rows( 3 ),
New Column( "Column 1", Character, "Nominal",
Set Values( {"1", "2", "3"} ) ) );
NamesList = {"Cool", "Awsome", "Bad"};
ValuesList = Column( dt, 1 ) << get values;
NamesValuesList = {};
// Build the Value Labels List
For( i = 1, i <= N Items( NamesList ), i++,
Insert Into( namesvalueslist,
Parse( ValuesList[i] || " = \!"" || NamesList[i] || "\!"" ) )
);