byVarを持つ統計カスタム(数式)関数の作成私が作成したこのウィッシュリスト項目に関連するもの:正規化と堅牢な統計関数 (および行列関数) を追加します。 。 とりあえずこれらをカスタム関数として書いてみようかと思いましたが (共有して全員に更新させるのは不可能だとわかっていても)、すぐに最初の問題に直面しました。それは列を参照する方法です... カスタム数式を使用するときに、行レベルの計算を使用したり、:colname ではなく列を文字列として参照したりすることになり、数式エディターから直接使用できなくなります。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
my_min = New Custom Function(
"custom",
"My Min1",
Function({x, y},
As Constant(
vals = Column(x) << get values;
groups = Column(y) << get values;
);
cur_group = Loc(groups, As Column(y));
vals[cur_group[Loc Min(vals[cur_group])]];
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
my_min = New Custom Function(
"custom",
"My Min2",
Function({x, y},
Col Minimum(Column(x), Column(y));
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
my_min = New Custom Function(
"custom",
"My Min3",
Function({x, y},
Col Minimum(x, y);
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
dt << New Column("ColMin", Numeric, Continuous, Formula(Col Minimum(:height, :sex)));
dt << New Column("MyMin1_str", Numeric, Continuous, Formula(custom:My Min1("height", "sex")));
dt << New Column("MyMin2_str", Numeric, Continuous, Formula(custom:My Min2("height", "sex")));
dt << New Column("MyMin3_str", Numeric, Continuous, Formula(custom:My Min3("height", "sex")));
dt << New Column("MyMin1_ref", Numeric, Continuous, Formula(custom:My Min1(:height, :sex)));
dt << New Column("MyMin2_ref", Numeric, Continuous, Formula(custom:My Min2(:height, :sex)));
dt << New Column("MyMin3_ref", Numeric, Continuous, Formula(custom:My Min3(:height, :sex)));データのブレンディングとクリーンアップデータの探索と視覚化マスカスタマイゼーションRe: byVarを持つ統計カスタム(数式)関数の作成ウィッシュリストの項目を使用すると、これがはるかに簡単になると思います。
カスタム列の式を一度に評価したり、行間の値をキャッシュしたりするためのオプションまたは関数
Re: byVarを持つ統計カスタム(数式)関数の作成2 つのコメント:
- それへの参照が見つからないようですが、内部数式のように行間に値をキャッシュするカスタム列数式を書く方法はないと、ある時点できっぱりと言われたのを覚えています。したがって、各行のコンテキストで評価する関数、つまり一度に 1 つの値を返す関数を作成する必要があります。(可能であれば、ここで誰かに訂正してもらいたいです。)
- JMP は、関数に渡す前に列参照を評価します (熱心な評価)。これは、列全体ではなく、その行の値を取得することを意味します。JMP に列への参照を渡すように指示する必要があります。これは Expr を使用して実行できます。
これで両方の問題が解決されると思いますが、非常に直感的またはユーザーフレンドリーであるかどうかはわかりません。
更新: カスタム関数は行コンテキストにアクセスできるため、Test2 のように、現在の行の値を関数に渡す必要をスキップできます。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
my_min = New Custom Function(
"custom",
"Test1",
Function({x,y,yval},
show(yval);
show(Name Expr(x)<< get values);
show(Loc(Name Expr(y) << Get Values, yval));
Min((Name Expr(x)<< get values)[Loc(Name Expr(y) << Get Values, yval)]);
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
custom:Test1(Expr(:age),Expr(:sex),"F");
dt << New Column("Test1", Numeric, Continuous, Formula(custom:Test1(Expr(:height), Expr(:sex), :sex)));
my_min = New Custom Function(
"custom",
"Test2",
Function({x,y},
xvals = Name Expr(x)<< get values;
yvals = Name Expr(y) << Get Values;
Min(xvals[Loc(yvals, yvals[row()])]);
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
dt << New Column("Test2", Numeric, Continuous, Formula(custom:Test2(Expr(:height), Expr(:sex))));Re: byVarを持つ統計カスタム(数式)関数の作成いい視点ね!私は評価する列参照を取得することに集中していたので、値が無意味であることにさえ気づきませんでした。もっと考えてみます。
Re: byVarを持つ統計カスタム(数式)関数の作成列としてではなく「行ごと」に評価している可能性が高いため、これは正しい答えを提供していないようです。

Re: byVarを持つ統計カスタム(数式)関数の作成これはあなたが望むことをしますか?関数パラメータが列参照であることが期待される場合は、関数パラメータを明示的に評価する必要があるようです。
my_min = New Custom Function(
"custom",
"My Min4",
Function({x, y},
EvalExpr(Col Minimum(Expr(x), Expr(y)));
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);