Почему Incanter теряет заголовок столбца при запросе только одного столбца?
При выборе двух столбцов из набора данных результат будет иметь два заданных заголовка столбца, как и ожидалось. Но когда указывается только один столбец, один результирующий столбец теряет свой заголовок, вместо этого он называется "0":
Это затрудняет использование $order или чего-либо еще в последующих шагах, которые принимают имена столбцов.
То есть это будет работать
(with-data data
(->> ($ [:foo :bar])
($order [:foo] :asc)
(view)))
и это не удастся
(with-data data
(->> ($ [:foo])
($order [:foo] :asc)
(view)))
Есть идеи, что не так или что делать?
2 ответа
Какую версию Incanter вы используете? Это поведение было изменено в последних версиях, и по крайней мере 1.5.4 работает правильно. Но учтите, что поведение $
отличается, когда вы передаете имя столбца как отдельный элемент и как вектор:
incanter.main=> (def data (dataset [:foo :bar] [[:a :b] [:c :d]]))
#'incanter.main/data
incanter.main=> ($ :foo data)
(:a :c)
incanter.main=> ($ [:foo] data)
| :foo |
|------|
| :a |
| :c |
Звучит так, будто вы нажали правильный ответ, когда указали, что в случае единственного ключа заклинатель просто возвращает последовательность. Один из способов обойти это, хотя это может быть немного менее элегантно, - просто запросить второй столбец и проигнорировать второй результат или поместить его в последовательность карт после. Что-то похожее на:
(map hash-map (repeat :key) result-seq)