在 crossfilter 的 reducio 中将自定义函数与预定义函数混合
Mixing custom function with predefined ones in reductio for crossfilter
我正在尝试同时使用 reductio
库中的 .std()
和 .custom()
函数。
reducio部分我的代码如下:
dims.theme1 = myCrossfilter.dimension(function(d) {return(d.theme1);});
groups.theme1 = dims.theme1.group();
var reducer = reductio()
.custom({initial:reduceInit,add:reduceAdd,remove:reduceRemove})
.std("pl");
reducer(groups.theme1);
我的自定义函数代码是:
reduceAdd = function(p,v) {
if (!p.fundsData.hasOwnProperty(v.AdyneAccount)) {
p.fundsData[v.AdyneAccount]=0;
}
if (!p.stratsData.hasOwnProperty(v.Strategy)) {
p.stratsData[v.Strategy]=0;
}
p.fundsData[v.AdyneAccount]+=+v.plfund;
p.stratsData[v.Strategy]+=+v.plstrat;
p.value+=+v.pl;
return(p);
};
reduceRemove = function(p,v) {
p.fundsData[v.AdyneAccount]-=+v.plfund;
p.stratsData[v.Strategy]-=+v.plstrat;
p.value-=+v.pl;
return(p);
};
reduceInit = function(p,v) {
return({
value:0,
fundsData:{},
stratsData:{}
});
};
我希望我的结果(通过执行 groups.theme1.all()[0]
)如下所示(我为这个例子输入的值是随机的):
{
"key": "theTheme",
"value": {
"value": 10,
"fundsData": {
"a": 10,
"b": 5,
"c": 4
},
"stratsData": {
"somename": 8
},
"count": null,
"sum": null,
"sumOfSq": null,
"std": 0
}
}
确实如此,但它不会产生 count
、sum
和 sumOfSq
的值(当然 std
也不会)。
当我 运行 .std("pl")
本身没有我的自定义函数在完全相同的记录集上时,它按预期工作。我不明白为什么添加自定义函数会阻止 .std("pl")
部分的正确计算。
欢迎大家帮忙!
在我看来这是 Reductio 中的一个错误。测试名称表明这不应该干扰 reducer 的其他方面,但测试的内容清楚地表明它确实会消除它们。
我创建了 an issue for this。不知道我什么时候能得到它。您可能只想为此实现一个普通的 Crossfilter 自定义减速器,直到我可以修复它或有人发送拉取请求。
我正在尝试同时使用 reductio
库中的 .std()
和 .custom()
函数。
reducio部分我的代码如下:
dims.theme1 = myCrossfilter.dimension(function(d) {return(d.theme1);});
groups.theme1 = dims.theme1.group();
var reducer = reductio()
.custom({initial:reduceInit,add:reduceAdd,remove:reduceRemove})
.std("pl");
reducer(groups.theme1);
我的自定义函数代码是:
reduceAdd = function(p,v) {
if (!p.fundsData.hasOwnProperty(v.AdyneAccount)) {
p.fundsData[v.AdyneAccount]=0;
}
if (!p.stratsData.hasOwnProperty(v.Strategy)) {
p.stratsData[v.Strategy]=0;
}
p.fundsData[v.AdyneAccount]+=+v.plfund;
p.stratsData[v.Strategy]+=+v.plstrat;
p.value+=+v.pl;
return(p);
};
reduceRemove = function(p,v) {
p.fundsData[v.AdyneAccount]-=+v.plfund;
p.stratsData[v.Strategy]-=+v.plstrat;
p.value-=+v.pl;
return(p);
};
reduceInit = function(p,v) {
return({
value:0,
fundsData:{},
stratsData:{}
});
};
我希望我的结果(通过执行 groups.theme1.all()[0]
)如下所示(我为这个例子输入的值是随机的):
{
"key": "theTheme",
"value": {
"value": 10,
"fundsData": {
"a": 10,
"b": 5,
"c": 4
},
"stratsData": {
"somename": 8
},
"count": null,
"sum": null,
"sumOfSq": null,
"std": 0
}
}
确实如此,但它不会产生 count
、sum
和 sumOfSq
的值(当然 std
也不会)。
当我 运行 .std("pl")
本身没有我的自定义函数在完全相同的记录集上时,它按预期工作。我不明白为什么添加自定义函数会阻止 .std("pl")
部分的正确计算。
欢迎大家帮忙!
在我看来这是 Reductio 中的一个错误。测试名称表明这不应该干扰 reducer 的其他方面,但测试的内容清楚地表明它确实会消除它们。
我创建了 an issue for this。不知道我什么时候能得到它。您可能只想为此实现一个普通的 Crossfilter 自定义减速器,直到我可以修复它或有人发送拉取请求。