我编写了一个小型 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();
}
}
由于客户端的某些事件在一分钟内doOnRserve()
调用了几次。
我的问题是:是否有可能只采购一次库,以便在所有新的 RSession 期间都可以使用它们而无需单独采购?
我在客户端尝试了类似的东西:
c.serverSource("/home/rserve/lib/libraries.r" )
c.serverSource("/home/rserve/lib/functions.r" )
这给了我以下异常(不知道为什么这不起作用eval
):
org.rosuda.REngine.Rserve.RserveException: serverSource failed, request status: access denied (local to the server)
我可以用特定的启动 Rserve.Rprofile
吗?
编辑:
基本上,有三种可能的方法:
- 让 /home/rserve/.Rprofile 获取 .r 文件。但是每次我打电话时,这个接缝都可以找到它们
new RConnection()
- 启动 Rserve 时将源命令直接传递给 R(不知道如何执行此操作)。
- 我的首选方法:使用 serverSource() 从客户端执行此操作,这会引发这些“拒绝访问”异常。
编辑2:
保留版本 v0.6-8 (338)
适用于 x86_64-pc-linux-gnu 的 R 版本 2.15.2。