Passing vectors into R
In order to do 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.
Getting ready
We must first complete the recipe, Setting up R to talk to Clojure, 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])
How to do it…
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 the conversion of all the data types into a string that R can read, we'll define a protocol,
ToR
. Any data types that we want to marshal into R must implement this, as follows:(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...