列参照が欠落している可能性のある数式を作成する最良の方法オブジェクトの内容に基づいて数式を作成するスクリプトがあります。場合によっては、オブジェクトに入力されるエントリがスキップされます。その場合、N Items(yVars) == 0 となります。空の列参照なしで数式を計算するにはどうすればよいでしょうか?
以下の例は、エントリの存在を確認し、If() ステートメントを使用して代替アクションを作成するという、非常に複雑なケースです。
If( N Items( yVars ) == 0,
Data Table( "HIRP" ) << New Column( "Average PTC",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Col Mean(
Col Maximum( :Power, :Heater, :HD_NUM ),
:Heater,
:WAFER_SUBSTRATE_LOT_ID_IDX
)
)
),
Eval(
Eval Expr(
Data Table( "HIRP" ) << New Column( "Average PTC",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Col Mean(
Col Maximum( :Power, :Heater, :HD_NUM ),
:Heater,
Expr(
Name Expr( As Column( Divider ) )
)
)
)
)
)
)
);
自動化とスクリプト作成Re: 列参照が欠落している可能性のある数式を作成する最良の方法一つの方法をご紹介します。
//first a table to add columns to
Names default to here(1);
dt = New Table( "Test Table",
Add Rows( 2 ),
New Column( "a", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2] ) )
);
//this one does create a column
if(!Contains(dt << get column names("string"), "b"),
dt << New Column( "b", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [3, 4] ) )
);
//this does not since b already exists
if(!Contains(dt << get column names("string"), "b"),
dt << New Column( "b", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [5, 6] ) )
);
Re: 列参照が欠落している可能性のある数式を作成する最良の方法現在行っている手順を避けるべき特別な理由がありますか?列参照が空の場合は、数式に追加しないでください。
あなたのやり方は特に複雑なところはなく、読みやすく理解しやすいです。if文を使って数式を設定するだけで、繰り返しを少し減らすことができます。私なら、この方法か、あなたが今やっている方法のどちらかを使います(質問を正しく理解していれば)。
Names Default To Here(1);
// myvar = 1;
dt = Open("$SAMPLE_DATA/Big Class.jmp");
newcol = dt << New Column("Test", Numeric, Continuous);
If(Is Missing(myvar),
newcol << Set Formula(
:height/:weight
);
,
newcol << Set Formula(
:weight/:height
)
);
読みにくく、理解しにくく、デバッグが難しいオプションがいくつかあります。
if文で数式を作成し、その数式を設定できます。
Names Default To Here(1);
myvar = 1;
dt = Open("$SAMPLE_DATA/Big Class.jmp");
fexpr = If(Is Missing(myvar), Name Expr(:height/:weight), Name Expr(:weight/:height));
Eval(EvalExpr(
newcol = dt << New Column("Test", Numeric, Continuous, Formula(
Expr(NameExpr(fexpr))
))
));
または、数式評価の中にif文を使用することもできます(私の意見では、不必要に複雑です)。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
newcol = dt << New Column("Test", Numeric, Continuous);
Eval(Substitute(
Expr(newcol << Set Formula(
_fexpr_
)),
Expr(_fexpr_), If(Is Missing(myvar), Name Expr(:height/:weight), Name Expr(:weight/:height))
));
Re: 列参照が欠落している可能性のある数式を作成する最良の方法現在の方法に対する私の根本的な不満は、コードが冗長に見えることです。断続的な列がある場合とない場合で、同じコードが2回繰り返されています。このような矛盾に対処するために、Try() ステートメントのようなものが用意されているべきだったと思います。そのような仕組みがあれば、編集作業も容易になるでしょう。
Re: 列参照が欠落している可能性のある数式を作成する最良の方法数式内で列参照が欠落している場合、適切に対処することはできません(Try() 関数を使用することもできますが、数式の処理速度が非常に遅くなる可能性が高いため、お勧めしません)。重複を避けるためのいくつかのオプションも提示しました。列を作成したり、数式を追加したりする関数を作成することもできます。