In order to do any very complex or meaningful analysis, we'll need to be able to pass vector or matrix data into R to operate on and analyze.
Let's see how to do this.
We must first complete the Setting up R to talk to Clojure recipe, and have Rserve running. We must also have the Clojure-specific parts of that recipe done and the connection to Rserve made.
We'll also need access to the clojure.string
namespace.
(require '[clojure.string :as str])
To make passing values into R easier, we'll first define a protocol, and then we'll use it to pass a matrix to R.
In order to handle converting all the datatypes into a string that R can read, we'll define a protocol,
ToR
. Any datatypes that we want to marshal into R must implement this.(defprotocol ToR (->r [x] "Convert an item to R."))
Now, we'll implement this protocol for sequences, vectors, and numeric types.
(extend-protocol ToR clojure.lang.ISeq (->r [coll] (str "c(" (str/join \, (map...