Search code examples
javarrserve

Sourcing r-files only once on Rserve


I have written a small Java client which does some calculations on an Rserver. For this purpose, there are functions.r- and libraries.r files on the server side, which have to be sourced, before the actual calculation can be done.

Currently I load the files on every new connection:

import org.rosuda.REngine.Rserve.RConnection;

public class RserveTester {

  public void doOnRserve() {
    RConnection c = new RConnection( "rserve.domain.local" );
    c.login( "foo", "user" );
    c.eval("source(\"/home/rserve/lib/libraries.r\")");
    c.eval("source(\"/home/rserve/lib/functions.r\")");
    c.eval( "someCalculation()" )
    c.close();
  }  
}

where doOnRserve() is called due to some events on the client side couple of times in a minute.

My Question is: Is it possibility to source the libraries only once, such that they are available during all new RSessions without individual sourcing?

I tried on the client side something like:

c.serverSource("/home/rserve/lib/libraries.r" )
c.serverSource("/home/rserve/lib/functions.r" )

Which gives me te following exception (no idea why this does not work wile eval does):

 org.rosuda.REngine.Rserve.RserveException: serverSource failed, request status: access denied (local to the server)

Can I start the Rserve with a specific .Rprofile?

EDIT:

Basically, there seam to be three possible methods:

  1. Let the /home/rserve/.Rprofile source the .r files. But this seams to source them each time I call new RConnection()
  2. Passing the source commands directly to R when starting Rserve (no idea how to do this).
  3. My preferred method: doing it from the client side using serverSource(), which throws these "access denied" exceptions.

EDIT2:

Rserve version v0.6-8 (338)

R version 2.15.2 for x86_64-pc-linux-gnu.


Solution

  • This is trivially done by adding source lines to your configuration file, i.e., putting

    source "/foo/bar.R"
    

    in /etc/Rserv.conf will source /foo/bar.R on startup. If you want to use another config file, use --RS-conf command line argument to specify it. Finally, Rserve 1.x supports --RS-source option on the command line as well.

    Without the quotations in the filepath, it may give File Not Found Error.

    BTW: you mentioned serverSource() access denied - that means you did not enable control commands in Rserve (control enable in the configuration or --RS-enable-control on the command line).

    PS: Please use stats-rosuda-devel mailing list for Rserve questions.