如何编写在KDB查询中使用列的函数?

  • 本文关键字:函数 何编写 KDB 查询 kdb
  • 更新时间 :
  • 英文 :


我有一个查询的形式:

select lR cor mR from j

这很好,我得到一个数字。

当我尝试使用自定义函数时:

center:{x - avg raze x}
fit1:{
xc: 0^center[x];
yc: 0^center[y];
beta: raze yc lsq xc;
intercept: (avg raze y) - (beta * avg raze x);
raze beta
}

select fit1[lR;mR] from j

我得到一列数字,因为它似乎已经按行而不是按列应用了函数。

两个问题:

  • 我该如何解决这个问题?
  • 是否可以看到cor的源代码,以便我可以学习,或者它是关闭的?

编辑

t:([] date:tt; x:xx; y:yy)
t          x y
--------------
2021.01.01 0 4
2021.01.02 1 4
2021.01.03 2 4
2021.01.04 3 4
2021.01.05 4 4
2021.01.06 5 4
2021.01.07 6 4
2021.01.08 7 4
2021.01.09 8 4
2021.01.10 9 4
select fit1[x;y] from t

现在更新了一个合适的例子:

center:{x - avg raze x}
fit1:{
xc: 0^center[x];
yc: 0^center[y];
beta: raze yc lsq xc;
intercept: (avg raze y) - (beta * avg raze x);
raze beta
}
tt: 2021.01.01 + til 10
xx: 9h$til 10
yy: ((xx)*3) + 4
t:([] date:tt; x:xx; y:yy)
date       x y
---------------
2021.01.01 0 4
2021.01.02 1 7
2021.01.03 2 10
2021.01.04 3 13
2021.01.05 4 16
2021.01.06 5 19
2021.01.07 6 22
2021.01.08 7 25
2021.01.09 8 28
2021.01.10 9 31
q)fit1[enlist xx;enlist yy]
,3f
q)select fit1[x;y] from t
y
----
-4.5
-3.5
-2.5
-1.5
-0.5
0.5
1.5
2.5
3.5
4.5

d

  1. 我不认为提供了足够的信息来帮助确定您的问题,但是您的函数创建了一个intercept变量,它不会在最终返回中使用。这条线目前没有意义。您的自定义函数不是设计为返回像cor这样的原子。

  2. 如果您在q控制台中输入关键字,则某些关键字提供底层k代码。如果你得到了关键字,那么它是隐藏的,但对于cor和cov,等效的代码在文档中提供。

https://code.kx.com/q/ref/cor/https://code.kx.com/q/ref/cov/

  1. 回答你的第一个问题,你可以这样做:
q)fit1[j`lR;j`mR]

相关内容

  • 没有找到相关文章

最新更新