我编写了一个小型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吗?
编辑:
基本上,接缝有三种可能的方法:
new RConnection()EDIT2:
Rserve版本v0.6-8(338)
R版本2.15.2 for x86_64-pc-linux-gnu.
通过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问题.