Rserverでいくつかの計算を行う小さな Java クライアントを作成しました。この目的のために、サーバー側にファイルがあり、実際の計算を行う前にソースを取得する必要があります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();
}
}
wheredoOnRserve()
は、クライアント側のいくつかのイベントにより、1 分間に数回呼び出されます。
私の質問は次のとおりです。ライブラリを一度だけソースして、個々のソースなしですべての新しい 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
か?
編集:
基本的に、次の 3 つの方法が考えられます。
- /home/rserve/.Rprofile で .r ファイルを取得します。しかし、これは私が呼び出すたびにそれらを調達するための縫い目です
new RConnection()
- Rserveの起動時にソースコマンドをRに直接渡す(これを行う方法がわからない)。
- 私の好みの方法: serverSource() を使用してクライアント側から実行すると、これらの「アクセス拒否」例外がスローされます。
EDIT2:
Rserve バージョン v0.6-8 (338)
x86_64-pc-linux-gnu の R バージョン 2.15.2。