我编写了一个小型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)
我可以使用特定的.Rprofile
启动Rserve吗?
修改
基本上,接缝有三种可能的方法:
new RConnection()
EDIT2:
Rserve版本v0.6-8(338)
版本2.15.2 for x86_64-pc-linux-gnu。
答案 0 :(得分:7)
通过在配置文件中添加source
行,即放置
source "/foo/bar.R"
/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问题。
答案 1 :(得分:1)
是的,你可以。永远记住这一点:
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>
或者作为Rserve
州的文档:
\ description {以守护进程模式启动Rserve(仅限unix)。
任何额外的 与Rserve无关的参数将直接传递给 底层R.用于配置,使用和命令行参数 请参阅在线文档 http://www.rforge.net/Rserve。使用\ code {R CMD Rserve --help}来表示 简短的帮助。