Kdb 为wj生成任意函数

Kdb 为wj生成任意函数,kdb,Kdb,在KDBwj功能中: wj[w;c;t;(q;(f0;c0);(f1;c1))] 我希望有任意数量的聚合函数 myList: `A`B`C..... (can be arbitrary) 我想生成一个sum函数列表 mySumFuncs: {(sum;x)} each myList 并以这种方式使用它: wj[w;c;t;(q,mySumFuncs)] 但它抱怨类型错误。 有人能帮忙吗?最后一个参数的格式不正确,请重试 wj[w;c;t;登记[q],mySumFuncs] 这是因为wj的

在KDB
wj
功能中:

wj[w;c;t;(q;(f0;c0);(f1;c1))]
我希望有任意数量的聚合函数

myList: `A`B`C..... (can be arbitrary)
我想生成一个
sum
函数列表

mySumFuncs: {(sum;x)} each myList
并以这种方式使用它:

wj[w;c;t;(q,mySumFuncs)]
但它抱怨
类型
错误。
有人能帮忙吗?

最后一个参数的格式不正确,请重试

wj[w;c;t;登记[q],mySumFuncs]

这是因为wj的最后一个参数需要(table;agg1;agg2;…;aggn)格式。 由于表是没有登记的词典列表,因此聚合将修改为词典列表,而不是表是第一项的列表

更容易看到的是,下面是基于中的wj示例


嗨,先生,我们为什么要征募q?“登记q”和“登记[q]”之间有什么区别吗?Hey@delita编辑了我的答案,提供了一个恰当的解释。希望能更清楚一点
q)w:-2 1+\:t.time
q)t:([]sym:3#`ibm;time:10:01:01 10:01:04 10:01:08;price:100 101 105)
q)q:([]sym:9#`ibm;time:10:01:01+til 9;ask:101 103 103 104 104 107 108 107 108;bid:98 99 102 103 103 104 106 106 107)
q)f:`sym`time
q)w:-2 1+\:t.time
q)q)wj[w;f;t;(q;(max;`ask);(min;`bid))]
sym time     price ask bid
--------------------------
ibm 10:01:01 100   103 98
ibm 10:01:04 101   104 99
ibm 10:01:08 105   108 104
q)(q;(max;`ask);(min;`bid))
+`sym`time`ask`bid!(`ibm`ibm`ibm`ibm`ibm`ibm`ibm`ibm`ibm;10:01:01 10:01:02 10..
(max;`ask)
(min;`bid)
q)q,((max;`ask);(min;`bid))
`sym`time`ask`bid!(`ibm;10:01:01;101;98)
`sym`time`ask`bid!(`ibm;10:01:02;103;99)
`sym`time`ask`bid!(`ibm;10:01:03;103;102)
`sym`time`ask`bid!(`ibm;10:01:04;104;103)
`sym`time`ask`bid!(`ibm;10:01:05;104;103)
`sym`time`ask`bid!(`ibm;10:01:06;107;104)
`sym`time`ask`bid!(`ibm;10:01:07;108;106)
`sym`time`ask`bid!(`ibm;10:01:08;107;106)
`sym`time`ask`bid!(`ibm;10:01:09;108;107)
(max;`ask)
(min;`bid)
q)enlist[q],((max;`ask);(min;`bid))
+`sym`time`ask`bid!(`ibm`ibm`ibm`ibm`ibm`ibm`ibm`ibm`ibm;10:01:01 10:01:02 10..
(max;`ask)
(min;`bid)