为什么只在查询一列时,Incanter会失去列标题?

时间:2013-10-30 17:33:45

标签: clojure incanter

从数据集中选择两列时,结果具有预期的两个给定列标题。但是当只指定一列时,一个结果列丢失了它的标题,而是标题为“0”:

这使得在后面的列名称中使用$ order或其他任何内容都很困难。

即,这将起作用

(with-data data   
  (->> ($ [:foo :bar])
       ($order [:foo] :asc)
       (view)))

这将失败

(with-data data
  (->> ($ [:foo])
       ($order [:foo] :asc)
       (view)))

任何想法出错或做什么?

2 个答案:

答案 0 :(得分: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 |

答案 1 :(得分:0)

当你指出在单键情况下,incanter只返回一个序列时,听起来就像你找到了正确的答案。解决这个问题的一种方法是,虽然它可能稍微不那么优雅,但是只需要求第二列并忽略第二个结果或将其放入一系列地图之后。有些东西只是有点像hackish:

(map hash-map (repeat :key) result-seq)