JSL: Behandeln Sie die Variable innerhalb der Formel „<< set Formula“ als Konstante/LiteralIch habe das Gefühl, dass es einen einfachen Weg geben sollte, dies zu tun, aber es entzieht sich mir ...
Beispiel:
blockSize = 15;
col<<set formula(Sequence(1,1000,1,blockSize));
Nachdem Sie das Skript ausgeführt haben, sehen Sie sich die Formel in der Datentabelle an – „blockSize“ wird immer noch als vierte Eingabe für Sequence() verwendet.
Ich möchte das nicht wirklich, da ich blockSize dynamisch innerhalb einer Schleife definieren werde, die sich für jede Spalte ändert, die sie durchläuft. Wie kann ich erreichen, dass die Formel der Datentabelle „Sequence(1,1000,1,15)“ anstelle von „Sequence(1,1000,1, blockSize)“ lautet?
Danke!
Betreff: JSL: Variable innerhalb der Formel „<< set Formula“ als Konstante/Literal behandelnEin weiterer Ansatz unter Verwendung des Musters 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 variableFormel, bei der die Variable durch den Blockgrößenwert ersetzt wird
Das Problem, das alle diese Lösungen lösen, besteht darin, einen Teil des Ausdrucks vorab auszuwerten, aber nicht den gesamten.
EvalExpr() ist eine Funktion, die ihr Argument teilweise auswertet. Die Teile, die Sie auswerten möchten, befinden sich in Expr()-Funktionen. (Daher der Name EvalExpr.) Das Ergebnis ist ein Ausdruck, der ausgewertet werden muss, um die setFormula-Operation auszuführen.
Betreff: JSL: Variable innerhalb der Formel „<< set Formula“ als Konstante/Literal behandelnManchmal verwende ich gerne Befehlszeichenfolgen mit Variablenersetzung, insbesondere wenn ich denselben Befehl mehr als einmal verwenden muss und die Formel oder der Ausdruck mehr als eine Variable enthält.
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)));
Betreff: JSL: Variable innerhalb der Formel „<< set Formula“ als Konstante/Literal behandelnblockSize = 15;
Eval(
Substitute(
Expr( col << Set Formula( Sequence( 1, 1000, 1, bbb ) ) ),
Expr( bbb ),
blockSize
)
);