表达式列表我想建立一个看起来像这样的列表。
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] || "\!"" ) )
);