Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sourcing r-files only once on Rserve

Tags:

java

r

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.

like image 453
Beasterfield Avatar asked Nov 25 '12 17:11

Beasterfield


2 Answers

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.

like image 186
Simon Urbanek Avatar answered Nov 03 '22 14:11

Simon Urbanek


Yes you can. Always remember this:

R> fortunes::fortune("Yoda")

Evelyn Hall: I would like to know how (if) I can extract some of the information 
             from the summary of my nlme.
Simon Blomberg: This is R. There is no if. Only how.
   -- Evelyn Hall and Simon 'Yoda' Blomberg
      R-help (April 2005)

R> 

Or as the documentation for Rserve states:

\description{ Starts Rserve in daemon mode (unix only).

Any additional parameters not related to Rserve will be passed straight to the underlying R. For configuration, usage and command line parameters please consult the online documentation at http://www.rforge.net/Rserve. Use \code{R CMD Rserve --help} for a brief help.

like image 40
Dirk Eddelbuettel Avatar answered Nov 03 '22 13:11

Dirk Eddelbuettel