我正在考虑将Clojure / Incanter作为R的替代品
并且想知道clojure / incanter是否有能力执行以下操作:
>将SQL语句的结果作为数据集导入(我使用dbGetQuery在R中执行此操作).
>重塑数据集 – 将行转换为也称为“pivot”/“unpivot”的列 – 我在R中使用reshape,reshape2包执行此操作(在R世界中,它称为熔化和转换数据).
>将重新整形的数据集保存到SQL表(我在R中使用RMySQL中的dbWriteTable函数执行此操作)
最佳答案 您可能对
core.matrix感兴趣 – 这是一个将多维数组和数值计算功能引入Clojure的项目.仍处于非常活跃的发展阶段但已经可以使
特征:
>一个干净,功能齐全的API
>适当的多维数组
>使用Clojure数据的惯用风格,例如:嵌套向量[[1 2] [3 4]]可以自动用作2×2矩阵.
>您可能期望的所有阵列重塑功能.
>所有常见的矩阵运算(乘法,缩放,行列式等)
>支持多个后端矩阵实现,例如JBLAS的高性能(使用本机代码)
在这里查看一些示例代码:
;; a matrix can be defined using a nested vector
(def a (matrix [[2 0] [0 2]]))
;; core.matrix.operators overloads operators to work on matrices
(* a a)
;; a wide range of mathematical functions are defined for matrices
(sqrt a)
;; you can get rows and columns of matrices individually
(get-row a 0)
;; Java double arrays can be used as vectors
(* a (double-array [1 2]))
;; you can modify double arrays in place - they are examples of mutable vectors
(let [a (double-array [1 4 9])]
(sqrt! a) ;; "!" signifies an in-place operator
(seq a))
;; you can coerce matrices between different formats
(coerce [] (double-array [1 2 3]))
;; scalars can be used in many places that you can use a matrix
(* [1 2 3] 2)
;; operations on scalars alone behave as you would expect
(* 1 2 3 4 5)
;; you can do various functional programming tricks with matrices too
(emap inc [[1 2] [3 4]])
core.matrix已被Rich Hickey批准为官方Clojure contrib库,并且很可能Incanter将来会转而使用core.matrix.
核心表格支持不直接包含在core.matrix中,但它只是一个单行程序,可以将结果集从clojure.java.jdbc转换为core.matrix数组.像下面这样的东西应该做的伎俩:
(coerce [] (map vals resultset))
然后你可以使用core.matrix转换和处理它,无论你喜欢什么.