3

我正在尝试实现以下链接http://data-sorcery.org/category/pca/并发现自己试图加载必要的 Incanter 库,即

(use '(incanter core stats charts datasets))

我对 Incanter 的唯一依赖是[incanter "1.5.4"]. 这足以加载库吗,我只是错过了什么吗?

我不太确定如何加载链接中突出显示的 4 个库。需要注意的是,我之前已经能够在 REPL 中使用 Incanter。

编辑:我的文本编辑器具有以下内容

(ns my-namespace.filename
(:use [incanter.core]
      [incanter.stats]
      [incanter.charts]
      [incanter.datasets]))


(def iris (to-matrix (get-dataset :iris))) 
(view iris)

返回错误CompilerException javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name, compiling:(pca.clj:11:22)

该错误似乎源于内部,即get-dataset ...我不确定如何修复。

4

2 回答 2

7

既然您说您已经能够从 REPL 加载依赖项,我假设您现在正尝试从 lein 加载它。

您需要在您的project.clj

(defproject my-project "0.1.0-SNAPSHOT"
  :dependencies [[incanter "1.5.4"]])

在您要使用incanter函数的文件的顶部,具有以下内容之一以及正确的命名空间和文件名。

(ns my-namespace.filename
  (:require (incanter [core :refer :all]
                      [stats :refer :all]
                      [charts :refer :all]
                      [datasets :refer :all]))

这与以下内容相同:

(ns my-namespace.filename
  (:require [incanter.core :refer :all]
            [incanter.stats :refer :all]
            [incanter.charts :refer :all]
            [incanter.datasets :refer :all]))

如同:

(ns my-namespace.filename
  (:use [incanter.core]
        [incanter.stats]
        [incanter.charts]
        [incanter.datasets]))

我使用第一个变体来保持一致性,因为我通常不想:refer :all使用所有依赖项。

于 2014-03-24T02:58:35.783 回答
3

有时 Incanter 的库(作为依赖项包含在内)和 Incanter 的命名空间之间存在混淆。一个库可以包含多个命名空间,例如 incanter-core 包含incanter.coreincanter.stats等,而incanter.datasetsincanter-io 库中(与 一起incanter.io),以及incanter.chartsincanter-charts 库中。

如果你incanter在你的中包含 as 依赖project.clj,那么它将包含 Incanter 提供的所有库和命名空间。

当人们只想使用它的一小部分功能时,Incanter 被拆分为许多库以减少依赖项的数量,例如,仅incanter.stats+ incanter.datasets

您可以在以下演示文稿中找到有关 Incanter 库的一些信息

已编辑:当数据集总是从 Internet 下载时,SSL 的问题源于旧错误。有关详细信息,请参阅此问题...

我已经在 2 天前提交了修复,但它仍然只在 master 中,没有发布。要在发布版本中修复它,请将以下内容添加到您的project.clj

:jvm-opts ["-Djsse.enableSNIExtension=false"]

这将防止错误。如果您不想从 Internet 下载数据集,您可以通过get-dataset's 选项明确地将路径传递给它们:

(get-dataset :iris :from-repo false 
              :incanter-home "/Users/ott/projects/incanter")

:incanter-home路径应指向data存储 Incanter 文件夹的目录。

于 2014-03-24T08:24:15.257 回答