diff mbox

[04/18] gnu: Add r-spams.

Message ID 20161124165139.13740-5-rekado@elephly.net
State New
Headers show

Commit Message

Ricardo Wurmus Nov. 24, 2016, 4:51 p.m. UTC
* gnu/packages/statistics.scm (r-spams): New variable.
---
 gnu/packages/statistics.scm | 52 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

Comments

Leo Famulari Nov. 25, 2016, 4:12 a.m. UTC | #1
On Thu, Nov 24, 2016 at 05:51:25PM +0100, Ricardo Wurmus wrote:
> * gnu/packages/statistics.scm (r-spams): New variable.

> +         ;; This looks like a syntax error.
> +         (add-after 'chdir 'patch-isnan
> +           (lambda _
> +             (substitute* '"src/spams/linalg/linalg.h"
> +               (("if isnan\\(lambda\\) \\{")
> +                "if (isnan(lambda)) {"))
> +             #t)))))

Has this been reported upstream? :)

LGTM regardless.
Ricardo Wurmus Nov. 28, 2016, 9:39 p.m. UTC | #2
Leo Famulari <leo@famulari.name> writes:

> On Thu, Nov 24, 2016 at 05:51:25PM +0100, Ricardo Wurmus wrote:
>> * gnu/packages/statistics.scm (r-spams): New variable.
>
>> +         ;; This looks like a syntax error.
>> +         (add-after 'chdir 'patch-isnan
>> +           (lambda _
>> +             (substitute* '"src/spams/linalg/linalg.h"
>> +               (("if isnan\\(lambda\\) \\{")
>> +                "if (isnan(lambda)) {"))
>> +             #t)))))
>
> Has this been reported upstream? :)

I’ve just sent an email to the developer.
diff mbox

Patch

diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index 0ba3316..dcf6dbe 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -3342,6 +3342,58 @@  character vector.")
 from within R.")
     (license license:expat)))
 
+(define-public r-spams
+  (package
+    (name "r-spams")
+    (version "2.5-svn2014-07-04")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://gforge.inria.fr/frs/download.php/33815/"
+                           "spams-R-v" version ".tar.gz"))
+       (sha256
+        (base32
+         "1k459jg9a334slkw31w63l4d39xszjzsng7dv5j1mp78zifz7hvx"))))
+    (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _ (chdir "spams") #t))
+         ;; Since R 3.3.0 including R headers inside of an extern "C" block
+         ;; causes C headers to be included, which results in a lot of
+         ;; duplicate definitions.  This can be avoided by defining
+         ;; NO_C_HEADERS before including the R headers.
+         (add-after 'chdir 'patch-use-of-R-headers
+           (lambda _
+             (substitute* "src/spams.cpp"
+               (("#include <R.h>" line)
+                (string-append "#define NO_C_HEADERS\n" line)))
+             #t))
+         ;; This looks like a syntax error.
+         (add-after 'chdir 'patch-isnan
+           (lambda _
+             (substitute* '"src/spams/linalg/linalg.h"
+               (("if isnan\\(lambda\\) \\{")
+                "if (isnan(lambda)) {"))
+             #t)))))
+    (home-page "http://spams-devel.gforge.inria.fr")
+    (synopsis "Toolbox for solving sparse estimation problems")
+    (description "SPAMS (SPArse Modeling Software) is an optimization toolbox
+for solving various sparse estimation problems.  It includes tools for the
+following problems:
+
+@enumerate
+@item Dictionary learning and matrix factorization (NMF, sparse @dfn{principle
+ component analysis} (PCA), ...)
+@item Solving sparse decomposition problems with LARS, coordinate descent,
+ OMP, SOMP, proximal methods
+@item Solving structured sparse decomposition problems (l1/l2, l1/linf, sparse
+ group lasso, tree-structured regularization, structured sparsity with
+ overlapping groups,...).
+@end enumerate\n")
+    (license license:gpl3+)))
+
 (define-public r-rpart
   (package
     (name "r-rpart")