JSLスクリプトの式数値型の単一列テーブルがあり、列を追加して、スクリプトで渡された変数名で最初の列の各セルをチェックする数式を指定したいのですが、
mycol << 新しい列 ("belowCount", 数値, 数式(If( col_to_check < limit_val, 1, 0 ) );
mycol は単一列データテーブルであり、col_to_check は最初の列の参照であり、limit_val は変数です。
テーブルを開くと数式が最初の列を取得できません
また、Column(1)、Column(1)、Expr関数も使用してみましたが、役に立ちませんでした。
自動化とスクリプトデータアクセスRe: JSLスクリプト内の数式正しい構文:
Eval(
Eval Expr(
mycol << New Column( "belowCount",
Numeric,
Formula( If( Expr( Name Expr( As Column( col_to_check ) ) ) < Expr( limit_val ), 1, 0 ) )
)
)
)
Re: JSLスクリプト内の数式まず、例の数式には閉じ括弧が足りなかったので、エラーが発生した可能性があります。次に、「col_to_check」の前に「:」が必要だった可能性があります。ただし、列の変数名であった場合、またはスペルと大文字小文字が全く同じだった場合は別です。
以下は、私が実際に使用できたもので、あなたが求めている機能を実現できたと思います。新しい列の行の先頭でEvalとEval Exprを使用して変数を評価し、列を作成しました。
names default to here(1);
mycol = current data table();
limit_val = 5;
eval(eval expr(mycol << New Column ("belowCount", Numeric, Formula(If( :col_to_check < expr(limit_val), 1, 0 ) ))));
Re: JSLスクリプト内の数式変数を数式に評価する必要があります。これは今でも参考になります。Eval Insert、Eval Expr、Parse、Substitute を使って、ある式を別の式に挿入する方法があります(少し更新が必要かもしれませんが)。Eval(Substitute()) を使った方法の1つを以下に示します(このような単純なケースでは、hogi がデモで紹介した Eval(EvalExpr()) を使用します)。
Names Default To Here(1);
new_col = Eval(Substitute(
Expr(mycol << New Column("belowCount", Numeric,
Formula(If(col_to_check < _limit_val_, 1, 0))
)),
Expr(col_to_check), Name Expr(AsColumn(mycol, 1)),
Expr(_limit_val_), limit_val
));
そして完全な例
Names Default To Here(1);
limit_val = 5;
mycol = New Table("Untitled",
Add Rows(10),
Compress File When Saved(1),
New Column("Column 1", Numeric, "Continuous", Set Values([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
);
new_col = Eval(Substitute(
Expr(mycol << New Column("belowCount", Numeric,
Formula(If(col_to_check < _limit_val_, 1, 0))
)),
Expr(col_to_check), Name Expr(AsColumn(mycol, 1)),
Expr(_limit_val_), limit_val
));
