Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 为什么白炽灯在只查询一列时会丢失列标题?_Clojure_Incanter - Fatal编程技术网

Clojure 为什么白炽灯在只查询一列时会丢失列标题?

Clojure 为什么白炽灯在只查询一列时会丢失列标题?,clojure,incanter,Clojure,Incanter,当从数据集中选择两列时,结果将具有预期的两个给定列标题。但是,当只指定一列时,生成的一列将丢失其标题,取而代之的是标题为“0”: 这使得在以后的步骤中很难使用$order或其他采用列名的方法 也就是说,这将起作用 (with-data data (->> ($ [:foo :bar]) ($order [:foo] :asc) (view))) 这将失败 (with-data data (->> ($ [:foo])

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

这使得在以后的步骤中很难使用$order或其他采用列名的方法

也就是说,这将起作用

(with-data data   
  (->> ($ [:foo :bar])
       ($order [:foo] :asc)
       (view)))
这将失败

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

你知道哪里出了问题或者该怎么办吗?

当你指出在单键情况下,白炽灯只是返回一个序列时,听起来你找到了正确的答案。解决这个问题的一种方法是,只需请求第二列并忽略第二个结果,或者在第二列之后将其放入一系列映射中,尽管这可能会稍微不那么优雅。只是有点粗俗,比如:

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

您使用的是哪个版本的白炽灯?在最新版本中,此行为已更改,并且至少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 |

你能在每种情况下都包含一点
数据和一点输出吗?等等,我想我看到了发生了什么:两列示例中的白炽灯返回
Incanter.core.Dataset
,一列示例中的
clojure.lang.LazySeq
。这让我想起了。如果您仍然喜欢,我可以提供数据,但这可能已经有帮助了?即使是最少量的样本数据也可以,只需使用
(def data(数据集[:foo:bar][[:a:b][:c:d]])