函数返回kdb/q中的表
我是kdb/q新手,不熟悉kdb\q功能,希望有人能帮我。问题是: 我有一个简单的q函数,声明如下:函数返回kdb/q中的表,kdb,Kdb,我是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 ... 非常感谢 您只需将列名作为参数传递给函数: q)tab:([
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
...
非常感谢 您只需将列名作为参数传递给函数:
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
或者,您可以使用函数形式将该查询转换为函数:
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
您只需将列名作为参数传递给函数:
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
或者,您可以使用函数形式将该查询转换为函数:
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
由于
+
被重载,无法同时使用atom和list,res:func[x;y]
将工作得非常好;但是,如果二元函数只接受作为原子而不是列表的参数,则两者都将起作用:
q)select res:func'[x;y] from tab // using each-both func'[x;y]
res
---
5
7
9
e、 g从列s
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"
由于+
被重载,无法同时使用atom和list,res:func[x;y]
将工作得非常好;但是,如果二元函数只接受作为原子而不是列表的参数,则两者都将起作用:
q)select res:func'[x;y] from tab // using each-both func'[x;y]
res
---
5
7
9
e、 g从列s
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"
那是阿威森!你能给我解释一下第二种选择吗>?我不太明白,它是用select的函数形式工作的,这是非常详细的描述。要查看查询的函数形式,您可以运行parse“select res:func[x;y]from tab”
,它将输出组成查询所需的4个参数。非常感谢!还有一个快速问题:我有一个函数func:{[id;time]从synp\t中选择last synp,其中instr\u id=id,tp\u time
;但是当我运行func[81;05:01:06 05:06:01]
时,它会给我“长度错误”。。你知道我哪里错了吗?那是阿威森!你能给我解释一下第二种选择吗>?我不太明白,它是用select的函数形式工作的,这是非常详细的描述。要查看查询的函数形式,您可以运行parse“select res:func[x;y]from tab”
,它将输出组成查询所需的4个参数。非常感谢!还有一个快速问题:我有一个函数func:{[id;time]从synp\t中选择last synp,其中instr\u id=id,tp\u time
;但是当我运行func[81;05:01:06 05:06:01]
时,它会给我“长度错误”。。你知道我哪里错了吗。。?