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개:
- 이에 대한 참조를 찾을 수 없는 것 같지만 어느 시점에서 내부 수식처럼 행 사이에 값을 캐시하는 사용자 정의 열 수식을 작성할 방법이 없다는 말을 확실히 들었던 기억이 납니다.따라서 각 행의 컨텍스트에서 평가하는 함수를 작성해야 합니다. 즉, 한 번에 하나의 값을 반환한다는 뜻입니다.(가능하다면 누군가가 여기서 나를 바로잡아줬으면 좋겠습니다.)
- 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);