如何将列作为公式中的参数传递你好,
我正在尝试在作为变量存储在列表中的列上创建一个简单的公式。
我不明白为什么 JSL 拒绝执行公式。
如果我通过它存储的 hte 字符串更改公式中的参数,它会完美运行。
有帮助吗??
这是我使用的代码:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
for(j=1, j <= N items(MyList), j++,
dt << New Column( ParamPlot[j], Formula( 2* ParamPlot[j]) );
);
我试过 Eval、Eval expr 之类的东西,...但现在 
Re: 如何在公式中将列作为参数传递简短而有效:)
非常感谢 :)
Re: 如何在公式中将列作为参数传递我无法抗拒最后一次拍摄。 简短而甜美,而且有效。 利用评估插入评估变量, :名称()引用列, “\[]\”允许在字符串中使用双引号,最后使用评估(解析())运行结果字符串。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
new_col_expr = evalinsert("\[dt << New Column("^paramplot[j]^", Formula(2 * :name("^mylist[j]^")))]\");
eval(parse(new_col_expr));
);Re: 如何在公式中将列作为参数传递首先谢谢大家的回答。。。
以下是我对所有提出的解决方案的看法:
1/ Mark 提出的解决方案:完美运行(尽管在不用于 Eval、parse、Substitue 等时难以阅读)。
2/ Jan 提出的解决方案:确实,在眼中更好(也使用 eval、substituteinto、...)。 顺便说一句,它工作得很好。
3/ Byron 的解决方案:也使用 Eval、substitute、expr...完美工作
4/ pmroz 的解决方案是迄今为止最简单的(对眼睛而言),但是我们得到的公式仍然引用了 MyList 而不是它们应该代表的列......这意味着如果我更改“年龄”列中的值”,列“age2”将不会更新。
谢谢大家的建议:)
Re: 如何在公式中将列作为参数传递正如拜伦所说,您正在尝试创建一个本身是其 2 倍的新列。 我想这就是你想要的。 AS COLUMN 成功了。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
dt << New Column( ParamPlot[j], Formula( 2 * as column(dt, MyList[j]) ) )
);
只要您不添加行,这就很好用。 然后你需要 evals,exprs 等。
Re: 如何在公式中将列作为参数传递看起来您正在尝试制作一个将自身乘以 2 的公式。这将不起作用,应该返回一个空值。
此外,“j”是一个用于制作矩阵的函数(请注意,它在 JSL 编辑器中变为蓝色)因此我通常避免将“j”用作变量,以防万一它可能以意想不到的方式被插入。
使用列名和引用可能会非常令人沮丧。 看看这个策略。
在循环内部,首先创建该列,并在创建时为其提供一个句柄“newcol”以用作参考。 接下来是大 eval(substitute)) 子句。 在这个参数中,“col<
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( i = 1, i <= N Items( MyList ), i++,
newcol=dt << New Column( ParamPlot[i] );
Eval(
Substitute(
Expr(
newcol << set formula( a * 2 ) ) ,
Expr( a ), As Name( mylist[i] )
);
));Re: 如何在公式中将列作为参数传递也许这稍微好一点(在某些人看来):
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
CMD = Expr(dt << New Column( NameTBD, Formula( 2 * colTBD) ));
SubstituteInto(CMD, Expr(NameTBD), ParamPlot[j], Expr(ColTBD), Parse(":"||MyList[j]));
CMD;
);
Re: 如何在公式中将列作为参数传递问题在于 Formula() 的参数被视为文字表达式。 它不会评估 ParamPlot[j] 并用结果代替您想要的公式。 看起来你应该能够使用表达式,但我对这种方法一无所知,所以这里有一个基于字符串的解决方案:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
Eval(
Parse(
Substitute("dt << New Column( \!"nnn\!", Formula( 2 * :ppp ) )",
"nnn",
ParamPlot[j],
"ppp",
MyList[j]
)
);
);
);
我真的不喜欢使用字符串,但有时,你必须做你必须做的事情。