Генерируемые произвольные функции для wj - PullRequest
0 голосов
/ 25 апреля 2018

В функции 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)]

Но он жалуется на ошибку type. Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 25 апреля 2018

последний аргумент не в правильном формате. Try

wj[w;c;t;enlist[q],mySumFuncs]

Это потому, что последний аргумент wj ожидает формат (table; agg1; agg2; ...; aggn).Поскольку таблица представляет собой список словарей без набора, агрегации добавляются в список словарей, а не в список, в котором таблица является первым элементом.

Легче видеть, ниже приведен пример wj вhttp://code.kx.com/q/ref/joins/#wj-wj1-window-join

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)
...