Clojure speaks statistics - a jisr between Clojure and R
The beginning of the pronunciation is the same as Clojure, but then it rhymes with 'kisser'. Actually, the last vowel is nonexistent, so you may try to pronounce it with less movement between s and r, like 'yesssr!'.
Hurray!
We are happy to announce that ClojisR
is selected by Clojurists Together in Q4 2020! Expect more information soon.
Libraries for Clojure-R interop are not new - see this list.
This project suggests yet another way to use R from Clojure.
Currently we target only JVM Clojure, but we are interested in generalizing the work to Clojurescript.
The related problem, of calling Clojure from R, may be addressed too in the future. We are experimenting with that.
Realize what is essential for Clojure to become a beginner-friendly solution for data science.
Expose the Clojure ecosystem to a different culture and to more diverse groups of users/programmers.
A Function-centric API, where the default mode of usage is calling R functions on R objects, from Clojure (Status: supported)
"R code as Clojure data", inspired by the EDN-based syntax inroducted in gg4clj and used in huri (Status: supported)
Interop with minimal copying of data (Status: supported)
Compatibility with common data abstractions such as tech.ml.dataset datasets (Status: partially supported)
Convenient wrappers for common use cases, such as visualization (Status: basic support for plots and Rmarkdown)
Abstraction over different runtimes (GNUR R, Renjin, FastR) (Status: GNU R is supported through Rserve; Renjin has some basic support, moved to a separate library ClojisRenjin)
Convenient multi-session support (Status: basic support with some known issues)
install.packages("Rserve",,"http://rforge.net")
)
Tested with Rserve version 1.8.6. Earlier versions are known to have a bug.Installing R with Rserve on MacOS can be problematic due to issues related to openssl installation. Please apply following steps (thanks to @ezmiller):
brew install openssl
.openssl
library is linked. Try in order:
brew link --force openssl
brew info openssl
for setting environment variables. Set the LIBRARY_PATH
environment variable to the location of the library, e.g. export LIBRARY_PATH=/usr/local/opt/openssl@1.1/lib
.clojisr
library uses clojure/tools.logging for logging. tools.logging
doesn't force any logging backend and users have to configure it on their side. To force specific backend you can set it using JVM options, for example in lein profile.clj
or project.clj
::jvm-opts ["-Dclojure.tools.logging.factory=clojure.tools.logging.impl/jul-factory"]
Thanks to Carsten Behring we have a Docker template prepared
https://github.com/behrica/clj-py-r-template
The Dockerfile of the template adds as well python + libpython-clj for completeness.
So it has in a single place all dependencies and they do work together and no further setup is required.
This should work for you (assuming you have the clj tool):
$ clj -Sdeps '{:deps {scicloj/clojisr {:mvn/version "1.0.0-BETA20"}}}'
Clojure 1.10.1
user=> (require '[clojisr.v1.r :refer [r]])
user=> (r '(+ 1 2))
[1] 3
org.slf4j/slf4j-nop {:mvn/version "1.7.30"}
to the deps to disable logger.The main ideas were discussed at Scicloj Web meeting #7 and ClojuTRE 2019.
Note however that:
More examples -- see the clojisr-examples repo
Here are the current priorities of the project in some central design and implementation questions.
Here are some possible future developments we are considering.
Please share your comments, thoughts, ideas and questions at the Issues Page of this project and at the r-interop stream of the Clojurians Zulip.
Also we run a stream for developers or people interested in contributing.
The code tests are embedded in the tutorials and are run when they are rendered (using notespace). This way we make sure that tests and documentation are in sync.
Working on this project, we enjoyed the following tools (partial list):
In early versions, hara.test was used for automated docstrings by tests. We may come back to using it.
clj-kondo for code quality control
notespace for documentation and tests
Copyright © 2019-2020 Scicloj
This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0.
This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version, with the GNU Classpath Exception which is available at https://www.gnu.org/software/classpath/license.html.
Can you improve this documentation? These fine people already did:
daslu, genmeblog, GenerateMe, Carsten Behring & Daniel SlutskyEdit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close