表達式列表我想建立一個如下所示的列表。
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]["測試參數"] = 1;
Laa[2]["測試參數"] = 4;
Naa["name1"]["FitParam"] = 2;
Naa["name2"]["FitParam"] = 5;
嵌套的好處實際上只有在您期望順序會改變並且位置很重要時才存在。
回复:表達式列表我不會評價哪一個最好。但我確實發現這兩個例子對於理解它是如何工作的很有用。
最後我的代碼看起來像這樣。注意:這不會按原樣運行,因為我沒有在這裡定義一些東西。
這是一個索引為 k 的循環。列表的列表存儲所有結果。
LList = {};
插入(L列表,解析( “測試參數” ||字符(k)|| “=\!”” ||模式[k]|| “\!” )); // 測試參數名稱
插入(L列表,解析( “FitParam” ||字符(k)|| “=\!”” ||dtStats[ 1 , 1 ]|| “\!” )); // 擬合參數名稱
插入(L列表,解析( “RSq” ||字符(k)|| ”= ||字符(dtStats[ 1 , 3 ]))); // R平方
回复:表達式列表最好的方式?” 您是否想在 JMP 社區中挑起爭鬥?
解決這個問題的方法不止一種。 決定哪種方式最好取決於幾個標準。 這是另一個候選解決方案,它與吉姆的解決方案不同,但不一定更好。
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] || "\!"" ) )
);