Использование флипа внутри каждого не работает в KDB

Используя each в таблице, я ожидал, что each будет работать с одной строкой за раз в форме таблицы с одной строкой. Однако сначала он преобразуется в словарь:

q) t:flip `a`b!(enlist 1;enlist 2);
q) {type x} each t
enlist 99h  / dictionary

Поэтому очевидно, что нужно просто использовать flip, чтобы превратить словарь в таблицу:

q) {type flip x} each t
An error occurred during execution of the query.
The server sent the response:
rank
Studio Hint: Possibly this error refers to invalid rank or valence

Хм - это странно. Нельзя flip словарь?? Что происходит не так?


kdb
person mchen    schedule 25.04.2014    source источник


Ответы (1)


Помните, что таблица — это список словарей.

q)show each ([]a:1 2 3;b:4 5 6);
a| 1
b| 4
a| 2
b| 5
a| 3
b| 6

http://code.kx.com/q4m3/8_Tables/

Значения каждого словаря являются атомами, а не списками. Таким образом, вы не можете flip вставить словарь в таблицу, вы должны убедиться, что значения являются списками.

q)enlist each ([]a:1 2 3;b:4 5 6)
+`a`b!(,1;,4)
+`a`b!(,2;,5)
+`a`b!(,3;,6)
q)type each enlist each ([]a:1 2 3;b:4 5 6)
98 98 98h
person WooiKent Lee    schedule 25.04.2014
comment
можно переписать как (type enlist@)each([]a:1 2 3;b:4 5 6) (или даже ('[type;enlist])each([]a:1 2 3;b:4 5 6), если хотите пофантазировать) - person Aaron Davies; 01.05.2014