从数据集中选择两列时,结果具有预期的两个给定列标题。但是当只指定一列时,一个结果列丢失了它的标题,而是标题为“0”:
这使得在后面的列名称中使用$ order或其他任何内容都很困难。
即,这将起作用
(with-data data
(->> ($ [:foo :bar])
($order [:foo] :asc)
(view)))
这将失败
(with-data data
(->> ($ [:foo])
($order [:foo] :asc)
(view)))
任何想法出错或做什么?
答案 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)