JSL:将“<<设置公式”公式中的变量视为常量/文字我觉得应该有一种简单的方法可以做到这一点,但它让我望而却步......
例子:
blockSize = 15;
col<<set formula(Sequence(1,1000,1,blockSize));
运行脚本后,查看数据表中的公式——“blockSize”仍被用作 Sequence() 的第四个输入。
我真的不想要这个,因为我要在一个循环中动态定义 blockSize,该循环会针对它迭代的每一列进行更改。 如何让数据表的公式为“Sequence(1,1000,1,15)”而不是“Sequence(1,1000,1, blockSize)”?
谢谢!
回复:JSL:将“<<设置公式”公式中的变量视为常量/文字使用 eval(evalexpr( ... expr( x ) ... )) 模式的另一种方法
dt=newtable("example", newcolumn("col"));
blockSize = 15;
<STRONG>eval</STRONG>(<STRONG>evalexpr</STRONG>(col<<SET formula="">expr(blockSize)))));</SET>
Formula with blocksize value substituted for the variableFormula with blocksize value substituted for the variable用块大小值代替变量的公式
所有这些解决方案正在解决的问题是预评估表达式的一部分,而不是全部。
EvalExpr() 是一个对其参数进行部分计算的函数。 您要评估的部分在 Expr() 函数内。 (因此得名 EvalExpr。)结果是一个表达式,需要对其求值以执行 setFormula 操作。
回复:JSL:将“<<设置公式”公式中的变量视为常量/文字有些人我喜欢使用带有变量替换的命令字符串,尤其是当我需要多次使用同一个命令,并且公式或表达式有多个变量时。
dt = New Table( "Testit",
Add Rows( 1500 ),
New Column( "bbb", Numeric, "Continuous", Format( "Best", 12 ), ),
New Column( "ccc", Numeric, "Continuous", Format( "Best", 12 ), ),
);
cmdStr = "^curcol^ << set formula(Sequence(1,1000,1,^blocksize^));";
curcol = ":bbb";
blocksize = 15;
eval(parse(evalInsert(cmdStr)));
// Eval Insert substitutes the variable values delimited by ^
// Parse converts the string to an expression
// Eval runs the expression
// uncomment the next line to see results of evalInsert
// show(evalInsert(cmdStr) );
//==can reuse===
curcol =":ccc" ;
blocksize = 5;
eval(parse(evalInsert(cmdStr)));
回复:JSL:将“<<设置公式”公式中的变量视为常量/文字blockSize = 15;
Eval(
Substitute(
Expr( col << Set Formula( Sequence( 1, 1000, 1, bbb ) ) ),
Expr( bbb ),
blockSize
)
);