데이터 테이블의 모든 행을 계산하는 열 함수를 개발하려고 합니다.
1) :X 및 :Y 좌표는 유클리드 거리 2보다 작습니다.
&
2) :Value는 5입니다.
이 5x5 격자에서 모든 :Value는 중앙 데이터 포인트(3,3)를 제외하고 1로 설정되며, 중앙 데이터 포인트의 :Value = 5입니다.
파란색 데이터 포인트는 중앙 데이터 포인트로부터 <= 2 단위 떨어져 있으므로 범위 내에서 데이터 포인트 1개를 올바르게 계산합니다.
빨간색 데이터 포인트에는 범위 내에 :Value = 5인 행이 없으므로 값이 0으로 계산됩니다.

이 작업을 위해 여러 가지 방법을 실험해 봤습니다. 주로 For Each Row() 명령을 사용해 봤는데, 열 함수에서는 제대로 작동하지 않는 것 같습니다. 아마 제가 잘못하고 있는 것 같습니다. 혹시 해결 방법 아시는 분 계신가요?
수식이 필요하다면 다소 느릴 수 있지만, As Constant를 사용하면 도움이 될 수 있습니다. Distance(), KDTable(), 그리고 VPTree()를 살펴보는 것도 좋습니다.
이것들은 최적화되지 않았지만 As Constant() 및 KDTable/Distance를 사용하는 방법에 대한 몇 가지 간단한 예입니다.
Current Data Table() << New Column("R", Numeric, Ordinal, Formula(
As Constant(
tree = KDTable(Current Data Table()[0, {"X", "Y"}]);
{rows, dist} = tree << K nearest rows(25, 13);
v = rows[Loc(dist <= 2)];
);
If(Contains(v, Row()),
1,
0
);
));
Distance를 사용한 한 가지 예
Current Data Table() << New Column("R", Numeric, Ordinal, Formula(
As Constant(
five_idx = Where(:Value == 5);
m = :X[five_idx] || :Y[five_idx];
);
Sqrt(Distance(Matrix({:X, :Y})`, m)) <= 2;
));
수식이 필요하지 않은 경우 이를 더욱 효율적으로 만들 수 있습니다.