Kdb+中nprev函数传入动态列参数遇类型不匹配问题求助
解决kdb+中nprev函数动态传入列参数的类型不匹配问题
原函数nprev:{y til[count y]-\:1+til x}仅支持传入单个整数作为x参数,当传入列(向量)时,til x会因无法处理向量输入抛出type: Mistmatched types错误——这是因为til函数要求输入为单个整数,而非列表/向量类型。
修改后的函数实现
nprev:{[x;y] y each (til count y) -\: (1+til') x}
代码说明
til' x:对x的每个元素单独执行til操作,生成对应长度的序列(比如x为0 1 2时,输出() (0) (0 1))1+til' x:为每个序列元素加1,得到需要回溯的步数序列(til count y) -\: (1+til') x:逐行计算每个位置需要取的元素索引(当前行索引减去回溯步数)y each ...:根据计算出的索引,从y中取出对应元素,生成每行的结果列表
测试示例
t:([] numb:0 1 2 3 4; symb:`LA`NY`LA`LA`CH); t:update npre:nprev[numb;symb] from t; t
执行后输出:
numb symb npre -------------- 0 LA `` 1 NY ,`LA 2 LA `NY`LA 3 LA `LA`NY`LA 4 CH `LA`LA`NY`LA
内容的提问来源于stack exchange,提问作者vicefreak04
相关产品推荐
相关产品推荐

