JSL: 「<< set Formula」内の変数を定数/リテラルとして扱いますこれを行う簡単な方法があるはずだと感じていますが、それは私にはわかりません...
例:
blockSize = 15;
col<<set formula(Sequence(1,1000,1,blockSize));
スクリプトを実行した後、データテーブルの式を表示します。「blockSize」は Sequence() の 4 番目の入力としてまだ使用されています。
ループ内で動的に blockSize を定義し、それが反復処理される列ごとに変更されるので、これは実際には望ましくありません。 データテーブルの式を「Sequence(1,1000,1, blockSize)」ではなく「Sequence(1,1000,1,15)」にするにはどうすればよいですか?
ありがとう!
Re: JSL: "<< set Formula" 内の変数を定数/リテラルとして扱うeval(evalexpr( ... expr( x ) ... )) パターンを使用するもう 1 つのアプローチ
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 操作を実行するにはこの式を評価する必要があります。
Re: JSL: "<< set Formula" 内の変数を定数/リテラルとして扱う特に同じコマンドを複数回使用する必要がある場合や、数式または式に複数の変数がある場合は、変数置換を伴うコマンド文字列を使用することを好む場合があります。
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)));
Re: JSL: "<< set Formula" 内の変数を定数/リテラルとして扱うblockSize = 15;
Eval(
Substitute(
Expr( col << Set Formula( Sequence( 1, 1000, 1, bbb ) ) ),
Expr( bbb ),
blockSize
)
);