You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KDB中each函数调用异常,无法实现对应行求和相乘需求

KDB 双参数函数逐行应用问题解决

问题分析

你的代码中f2 each [tmrv][tmpr]的写法不符合KDB双参数函数逐行映射的语法,导致函数未被正确执行,返回了未求值的函数表达式。

正确实现方式

方式1:用单引号'实现逐行映射

KDB中双参数函数的逐行应用,需要用'来配对两列的对应元素,语法为函数'[参数1; 参数2]:

f2:{[x;y] sum(x)*sum(y)};
tm:([] pr:(100.01 100.02;100.03 100.04); rv:(15.72 55.64; 16.92 15.17 12.21 34.99))
f2'[tm`pr; tm`rv]

执行结果:

14272.77 13207.91

方式2:直接计算(无需自定义函数)

如果逻辑简单,可直接对两列分别求和后相乘,写法更简洁:

sum each tm`pr * sum each tm`rv

结果与方式1完全一致。

方式3:将结果作为新列添加到表中

若需要把计算结果整合到原表,可用update结合'实现:

update result:f2'[pr;rv] from tm

生成的表:

pr                  rv                            result
---------------------------------------------------------
100.01 100.02       15.72 55.64                   14272.77
100.03 100.04       16.92 15.17 12.21 34.99       13207.91

错误原因说明

f2 each [tmrv][tm`pr]`等价于`f2 (tm`rv'[tm`pr])`,即先把`tm`pr`的每个元素作为参数传给`tm`rv`的each映射(这本身无意义,因为`tm`rv`是列表的列表而非函数),再将这个无效结果传给`f2`,最终返回未求值的函数表达式而非计算结果。

内容的提问来源于stack exchange,提问作者theQDude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 14:36:19