在Rserve上只获取一次r文件

Bea*_*eld 5 java r rserve

我编写了一个小型Java客户端,它在Rserver上进行了一些计算.为此,在实际计算完成之前,还有functions.r- 和libraries.r服务器端的文件,这些文件必须是来源的.

目前我在每个新连接上加载文件:

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();
  }  
}
Run Code Online (Sandbox Code Playgroud)

其中,doOnRserve()由于在一分钟内客户端几次,一些事件被调用.

我的问题是:是否有可能只采购一次图书馆,以便在没有个人采购的所有新RSession期间可以使用它们?

我试着在客户端做类似的事情:

c.serverSource("/home/rserve/lib/libraries.r" )
c.serverSource("/home/rserve/lib/functions.r" )
Run Code Online (Sandbox Code Playgroud)

这给了我以下异常(不明白为什么这eval不起作用)

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

我可以用特定的方式启动Rserve .Rprofile吗?

编辑:

基本上,接缝有三种可能的方法:

  1. 让/home/rserve/.Rprofile获取.r文件.但是每当我打电话时,这种接缝都会找到它们new RConnection()
  2. 在启动Rserve时将源命令直接传递给R(不知道如何执行此操作).
  3. 我首选的方法:使用serverSource()从客户端执行此操作,抛出这些"拒绝访问"异常.

EDIT2:

Rserve版本v0.6-8(338)

R版本2.15.2 for x86_64-pc-linux-gnu.

Sim*_*nek 7

通过source在配置文件中添加行,即放置,可以轻松完成

source "/foo/bar.R"
Run Code Online (Sandbox Code Playgroud)

/etc/Rserv.conf将源/foo/bar.R上启动.如果要使用其他配置文件,请使用--RS-conf命令行参数指定它.最后,Rserve 1.x也支持--RS-source命令行上的选项.

没有文件路径中的引用,它可能会给文件找不到错误.

BTW:你提到serverSource()访问被拒绝 - 这意味着你没有在Rserve中启用控制命令(control enable在配置或--RS-enable-control命令行中).

PS:请使用stats-rosuda-devel邮件列表获取Rserve问题.