clj-jri

Wrapper for Java/R interface


Keywords
clojure, java, jri, r

Documentation

clj-jri

A simple wrapper library for JRI, Java/R interface, mostly to draw charts on R.

Usage (Mac: libjri.jnilib, Ubuntu or Linux: libjri.so)

  • install jri
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
R CMD javareconf JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
install.packages("rJava")
  • check libs path
➜  clj-jri git:(master) ✗ ls /usr/local/lib/R/3.4/site-library/rJava/jri/JRI.jar
/usr/local/lib/R/3.4/site-library/rJava/jri/JRI.jar
➜  clj-jri git:(master) ✗ ls /usr/local/lib/R/3.4/site-library/rJava/jri/JRIEngine.jar
/usr/local/lib/R/3.4/site-library/rJava/jri/JRIEngine.jar
➜  clj-jri git:(master) ✗ ls /usr/local/lib/R/3.4/site-library/rJava/jri/REngine.jar
/usr/local/lib/R/3.4/site-library/rJava/jri/REngine.jar
➜  clj-jri git:(master) ✗ ls /usr/local/lib/R/3.4/site-library/rJava/jri/libjri.jnilib
/usr/local/lib/R/3.4/site-library/rJava/jri/libjri.jnilib
➜  clj-jri git:(master)
  • ENV setup
export R_HOME=/usr/local/Cellar/r/3.4.0_1/R.framework/Resources
  • project.clj : jvm-opts & resource-paths
  :dependencies [ ...
  [clj-jri "0.1.1-SNAPSHOT"]
  ]

  :jvm-opts [ ...
             ~(str "-Djava.library.path=/usr/local/lib/R/3.4/site-library/rJava/jri/:" (System/getProperty "java.library.path"))]

  :resource-paths [...
                   "/usr/local/lib/R/3.4/site-library/rJava/jri/JRI.jar"
                   "/usr/local/lib/R/3.4/site-library/rJava/jri/JRIEngine.jar"
                   "/usr/local/lib/R/3.4/site-library/rJava/jri/REngine.jar"
                   "/usr/local/lib/R/3.4/site-library/rJava/jri/libjri.jnilib"]
                   
  • lein
lein clean
lein repl
  • require
[clj-jri.R :as R]

Preparation

You may need to install R library "JGR/rJava" (http://rforge.net/JGR/) on R by "install.packages('rJava')" and have to set the following environment variables.

  :resource-paths ["lib/JRI.jar"
                   "lib/JRIEngine.jar"
                   "lib/REngine.jar"
                   "lib/libjri.jnilib"]
  :jvm-opts [~(str "-Djava.library.path=/usr/local/lib/R/3.4/site-library/rJava/jri/:" (System/getProperty "java.library.path"))]
  • Usage:
clj-jri.core=>  (ns test (:require [clj-jri.R :as R]))
WARNING: eval already refers to: #'clojure.core/eval in namespace: clj-jri.R, being replaced by: #'clj-jri.R/eval
nil

test=> (R/eval "rnorm(5)")
[-0.8927281724537759 -0.31414492274597694 0.16723344714036312 -0.7862470681485274 0.26787108270930693]
test=>

You also need to place REngine.jar, JRI.jar and libjri.so from the original project site onto LD_LIBRARY_PATH.

Examples and notes

See clj-jri.sample for the example codes and notes on the usage.

TODOs

Additional features may be supported in the future, when necessary.

References

For detail, refer to https://github.com/s-u/rJava and to http://www.rosuda.org/r/nightly/javadoc/org/rosuda/JRI/Rengine.html

License

Copyright © 2014 Takahiro SAWADA

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.