Here is a partial list of possible ways to use R from the JVM.
-
JNI-based, single-session JRI
- used in the original Rincanter
-
socket-based, multi-session Rserve; as mentioned above, more robust thanks to us of R in a separate process (or processes); the cost of perfomance vs JNI seems not too painful in typical use cases
-
REngine - a common abstration on the JVM side, that supports both JRI and Rserve
- used in both Rincanter and Rojure
-
http-based, multi session, secure, slow-for-large-datasets Opencpu
- used in Opencpu-clj
-
shelling out - running a new R process every time
-
pure-JVM, multi-session Renjin
-
a wrapper of several, such as Rsession
-
GraalVM-based FastR
-
possibly, a new JNA-based solution (along the lines of Libpython-clj)