- https://rforge.net/Rserve/doc.html
- https://github.com/s-u/Rserve
- Installation of Rserve:
- Default version (1.7.3):
- install.packages("Rserve")
- Latest (1.8.5, has lots of enhancements)
- install.packages("Rserve",,"http://rforge.net/",type="source")
- Default version (1.7.3):
This library is configured as a SWI-Prolog pack. It can be installed
using the command below. The installation requires git
, autoconf
and
the common C++ build tools.
?- pack_install('rserve_client').
This is tested on Ubuntu (14.04 and 16.04). It performs these steps:
- Clone my fork of Rserve (some extensions to the C++ client)
- Configure and build the C++ client library
- Build the SWI-Prolog interface
rserve.so
This package is primarily intended for accessing R in server environments such as SWISH. We created a Docker container that runs Rserve in a sandbox. The container exposes Rserve using a Unix-domain socket at the following address:
/home/rserve/socket
With SWISH and is interface installed in adjacent directories, i.e., below the same parent, R may be linked to SWISH doing
:- use_module(lib/r_swish).
Now, R is not safe. You should either run Rserve in a tight OS container
and load library(r/r_sandbox)
or run SWISH in authenticated mode by
loading lib/authenticate.pl.
User libraries
- library(r/r_call) Defines basic user API to R
- library(r/r_data) Utilities to create and fetch R data frames
Implementation libraries
- library(r/r_expand_dot) Allow for dots in atoms and functors without quotes.
- library(r/r_grammar) R Parser utilities (lexer) that support R quasi quotations
- library(r/r_term) DCG non-terminal to translate a term into an R command string
- library(r/r_sandbox) Declare the R API sandbox-safe
- library(r/r_serve) Low-level level communication library
This is just a proof of context. Obviously missing functionality:
- Cover more Prolog term --> R translations, following Real.
- Support OOB (Out Of Band) communication introduced in recent versions of Rserve to deal with R I/O.
This interface is inspired by Real by Nicos Angelopoulos. Main differences:
-
Real is embedded in SWI-Prolog. This is more productive for local deployment as the communication is faster and R has access to its default environment. Thus, R can open graphical windows and can read and write files. Real is also much more mature, notably in the supporting a much larger part of the R syntax from Prolog.
-
Rserve runs typically using a different user in a different environment. The R environment cannot easily communicate with your local development environment. When used in a (web) server environment this comes with several advantages. We can seriously sandbox the R executable, each query in SWISH gets its own R instance and information can thus nog leak between queries and users.