作为简化示例,我有
tbl:flip `sym`v1`v2!(`a`b`c`d; 50 280 1200 1800; 40 190 1300 1900)
我希望将列名传递给像
这样的函数f:{[t;c];:update v3:2 * c from t;}
在这种形式下它不起作用。有什么建议我怎么能做到这一点? 感谢
答案 0 :(得分:5)
另一种选择是使用update语句的功能形式。 https://code.kx.com/q/ref/funsql/#functional-sql
q)tbl:flip `sym`v1`v2!(`a`b`c`d; 50 280 1200 1800; 40 190 1300 1900)
q)parse"update v3:2*x from t"
!
`t
()
0b
(,`v3)!,(*;2;`x)
q){![x;();0b;enlist[`v3]!enlist(*;2;y)]} [tbl;`v2]
sym v1 v2 v3
------------------
a 50 40 80
b 280 190 380
c 1200 1300 2600
d 1800 1900 3800
答案 1 :(得分:3)
实现此目的的一个选择是使用@
amend:
console.log(Object.getOwnPropertyNames(Object.getPrototypeOf(m)));
这会更新表q){[t;c;n] @[t;n;:;2*t c]}[tbl;`v1;`v3]
sym v1 v2 v3
------------------
a 50 40 100
b 280 190 560
c 1200 1300 2400
d 1800 1900 3600
中的列c
,将新值保存为列t
。您也可以更改此选项以允许您传递自定义函数:
n