在输入列表上迭代函数(Q / KDB)

时间:2018-02-07 21:26:43

标签: kdb q-lang

我有一个函数f[symbol;date0;date1],以及一系列日期,比如说

2017.12.04
2017.12.05
2017.12.06

我想为给定的符号运行此函数 - 假设“AAPL” - 每天一次。实质上:

f[AAPL;2017.12.04;2017.12.04]
f[AAPL;2017.12.05;2017.12.05]
f[AAPL;2017.12.05;2017.12.05]

此函数返回一个表,因此我希望每个日期都附加到以前的结果中。什么是最好的方法呢?

2 个答案:

答案 0 :(得分:4)

此表单中函数的最佳方法是以通用格式使用kdb each-both

d:2017.12.04 2017.12.05 2017.12.06

f'[`AAPL;d;d]

kdb识别原子第一个参数并列出第二个参数,并按顺序将函数应用于每个参数。您也可以使用raze按顺序连接每个表:

raze f'[`AAPL;d;d]
如果模式相同,则

然后返回单个连接表。

答案 1 :(得分:2)

假设f为每个调用产生相同的列,那么你可以只调整结果

q)f:{([]1#x;1#y;1#z)};
q)raze f'[`a;3#.z.d;3#.z.d-1]
x y          z
-----------------------
a 2018.02.07 2018.02.06
a 2018.02.07 2018.02.06
a 2018.02.07 2018.02.06

结果是一个[更大]的表格,其结果相互附加