首页 文章

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

提问于
浏览
4

我有一个函数 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 回答

  • 2

    此形式的函数的最佳方法是以其通用形式使用kdb each-both

    d:2017.12.04 2017.12.05 2017.12.06
    
    f'[`AAPL;d;d]
    

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

    raze f'[`AAPL;d;d]
    

    如果模式相同,则返回单个连接表 .

  • 4

    假设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
    

    结果是[更大]表格,结果相互附加

相关问题