首页 文章

函数返回kdb / q中的表

提问于
浏览 1692
1

我是kdb / q的新手,我不熟悉kdb \ q函数,希望有人可以帮助我 . 这是一个问题:我有一个简单的q函数声明如下:

func:{[x;y] x+y}

{[x;y] x+y}[3;4] 给了我答案 7 . 一切都很完美 .

如果我有一个包含两列的表 t ,例如:

_x   _y
--------
3     4
2     5
6     2
...

我可以在q中有一个函数,以便为表 t 的每一行计算 x+y 吗?我的预期回报将是这样的:

res
---
7
7
8
...

非常感谢!

2 回答

  • 4

    您只需将列名称作为参数传递给函数:

    q)tab:([]x:1 2 3;y:4 5 6)
    q)func:{[x;y] x+y}
    q)
    q)select res:func[x;y]from tab
    res
    ---
    5
    7
    9
    

    或者,您可以使用函数形式将该查询转换为函数:

    q){?[x;();0b;enlist[`res]!enlist(`func;y;z)]}[tab;`x;`y]
    res
    ---
    5
    7
    9
    
  • 3

    由于 + 被重载以使用原子和列表, res:func[x;y] 将完美地工作;但是,如果二元函数只接受参数作为原子而不是列表,那么 each-both 将会起作用:

    q)select res:func'[x;y] from tab  // using each-both func'[x;y]
    res
    ---
    5
    7
    9
    

    例如,从列 s 中选择与 c 一样多的字符

    tab2:([] c:1 2 3;s:("123";"1234";"123456"))
    q)update res:#'[c;s] from tab2  //func'[x;y]
    c   s         res
    -----------------------
    1   "123"     enlist "1"
    2   "1234"    "12"
    3   "123456"  "123"
    

相关问题