하나의 필드 값에 대한 계산을 기반으로 샘플을 그룹화하는 데 문제가 있습니다. 샘플은한 필드에 종속 된 값을 기준으로 샘플 그룹화
{
"dataset": "DATASET2",
"sampleid": "ID2653",
"variables": {
// several variables, key: val
},
"bmus": {
"x": 3,
"y": 7
}
}
샘플 정적 9x7 격자의 셀에 속하는 bmus 필드 그리드 샘플의 위치를 맵의 형태이다. 원형 필터를 그리드 상단에서 이동할 수 있으며 원 필터를 이동 한 후 원 안에있는 샘플을 그룹화 할 수 있기를 원합니다. 그룹핑은
{
"key": {
"circles": ["circle1", "circle2"] // or [], ['circle1'], ['circle2']
},
"value": 282
}
의 형태 일 것이고, 그 정의 감소 함수 후 어떤 변수의 값에 기초하여 값을 계산하는 데 적용된다.
차원을 생성하고 그룹에 대한 나의 현재 설정은 다음과 같다 : 처음에는
$scope.dimension = crossfilterInst.dimension(function(d) {
return {
bmu: d.bmus,
valueOf: function() {
var ret = _.isUndefined(d.bmus) ? String(constants.nanValue) + "|" + String(constants.nanValue) : d.bmus.x + "|" + d.bmus.y;
// for NaN's the result is "-100|-100", otherwise in the form of "5|4"
return ret;
}
};
});
var group = $scope.dimension.group(function(d) {
return {
circles: function() {
return FilterService.inWhatCircles(d.bmu);
},
valueOf: function() {
return String(this.circles());
}
};
});
이 group.all()
의 그룹이 올 수 있습니다. 나중에 을 crossfilterInst
의 다른 차원에 적용하여 FilterService.inWhatCircles()
의 반환 값에 영향을 주어 선택된 샘플 양에 영향을주는 서클 필터가 그리드에서 이동하면 group.all()
에서 반환 된 그룹의 샘플 수가 점점 더 정확하지 않게됩니다.
처음에는 FilterService.inWhatCircles()
의 반환 값이 잘못된 경우가 있다고 생각했습니다. 오래 디버그 한 후에 나는 차원을 다시 만들면 (예전 코드를 처리하고 $scope.dimension
을 생성하는 동일한 코드를 실행 한 다음) 동일한 코드를 사용하여 샘플을 그룹화하면 결과 그룹이 올바른 것으로 나타났습니다. Crossfilter API 보면
, 나는 crossfilter가, 또는이 요구 사항을 만족하는 나사까지 내 그룹을 일부 캐싱을지지 않습니다 의심 :
값 기능처럼이 groupValue은 자연적으로 주문 값을 반환해야합니다; 또한이 순서는 치수의 값 함수와 일치해야합니다.
길고도 짧은 이야기 : 나는 bmus
샘플의 필드와 반복 함께 그룹을 기반으로 FilterService.inWhatCircles()
을 계산하는 방법을 함수 반환 값은 변경할 수 있습니다 때, 올바른을 얻을 때마다 치수를 다시 만들 필요없이 여러 떼?
그래, 내가 목표로 삼고있는 방법이 순수한 크로스 필터로는 가능하지 않거나 적어도 가능할 것으로 보인다. 차원을 다시 초기화하는 것이 옵션이 아니라는 것을 알았지 만 그룹화를 다시하면 충분했을 것입니다. 실제로 ("d.bmu"를 기반으로 그룹화 한 다음 필요한 그룹을 연결하여) 문제를 우회하기 위해 위조 된 그룹 방법을 사용하고있었습니다. 사용자 정의 함수 결과를 연결해야하기 때문에 내 요구에 부적합합니다. 하지만 crossfilter 직접 이런 종류의 동적 계산을 위해 사용되는 것 같아요. – amergin
크로스 필터의 모든 설계 결정은 효율성에 관한 것입니다. 여기에서 감소를 재 계산하기는 쉽지만 그룹간에 행을 이동하는 것은 어렵습니다 (계산 방식). 내가 말하는 가짜 그룹 솔루션은 무엇보다 효율적이어야합니다. – Gordon