Executing native Java code in R: an approach based on a local server

PeerJ Comput Sci. 2020 Sep 28:6:e300. doi: 10.7717/peerj-cs.300. eCollection 2020.

Abstract

The R language is widely used for data analysis. However, it does not allow for complex object-oriented implementation and it tends to be slower than other languages such as Java, C and C++. Consequently, it can be more computationally efficient to run native Java code in R. To do this, there exist at least two approaches. One is based on the Java Native Interface (JNI) and it has been successfully implemented in the rJava package. An alternative approach consists of running a local server in Java and linking it to an R environment through a socket connection. This alternative approach has been implemented in an R package called J4R. This article shows how this approach makes it possible to simplify the calls to Java methods and to integrate the R vectorization. The downside is a loss of performance. However, if the vectorization is used in conjunction with multithreading, this loss of performance can be compensated for.

Keywords: Interoperability; Java Native Interface; Java local server; R vectorization; TCP/IP connection.

Grants and funding

The author received no funding for this work.