Почему 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)
Другие вопросы по тегам