我有一个查询的形式:
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
-
我不认为提供了足够的信息来帮助确定您的问题,但是您的函数创建了一个
intercept
变量,它不会在最终返回中使用。这条线目前没有意义。您的自定义函数不是设计为返回像cor
这样的原子。 -
如果您在q控制台中输入关键字,则某些关键字提供底层k代码。如果你得到了关键字,那么它是隐藏的,但对于cor和cov,等效的代码在文档中提供。
https://code.kx.com/q/ref/cor/https://code.kx.com/q/ref/cov/
- 回答你的第一个问题,你可以这样做:
q)fit1[j`lR;j`mR]