1

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

这使得在后面的步骤中使用 $order 或其他任何使用列名的东西变得很困难。

也就是说,这将起作用

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

这将失败

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

任何想法出了什么问题或该怎么办?

4

2 回答 2

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 |
于 2013-10-31T09:35:05.573 回答
0

当您指出在单键情况下 incanter 仅返回一个序列时,听起来您找到了正确的答案。解决这个问题的一种方法是简单地请求第二列并忽略第二个结果,或者将其放入一系列映射中,尽管它可能不太优雅。只是有点骇人听闻的东西,例如:

(map hash-map (repeat :key) result-seq)
于 2013-10-30T21:23:04.587 回答