簡體   English   中英

如何在java中使用R模型來預測多個模型?

[英]How to use R model in java to predict with multiple models?

我有這個構造函數:

public Revaluator(File model,PrintStream ps) {
    modelFile=model;
    rsession=Rsession.newInstanceTry(ps, null);
    rsession.eval("library(e1071)");
    rsession.load(modelFile);

}

我想加載模型並用它預測。 Rsession.newInstanceTry(ps, null);的問題Rsession.newInstanceTry(ps, null); 總是相同的會話,所以如果我加載另一個模型,如:

Revaluator re1=new Revaluator(new File("model1.RData"),System.out);
Revaluator re2=new Revaluator(new File("model2.RData"),System.out);

re1和re2都使用相同的模型,因為var名稱是model ,所以只加載了最后一個。

評估功能:

public REXP evaluate(Object[] arr){
    String expression=String.format("predict(model, c(%s))", J2Rarray(arr));
    REXP ans=rsession.eval(expression);
    return ans;
}
//J2Rarray just creates a string from the array like "1,2,true,'hello',false"

我需要加載大約250個預測變量,有沒有辦法讓Rsession的每個實例成為一個新的分離R會話?

你還沒有在你的問題中粘貼所有代碼,所以在嘗試下面的(復雜)方法之前,請排除原因,並確保你的字段modelFilersession沒有聲明為static :-)

如果他們不是:

似乎R會話的創建方式依賴於操作系統。

在Unix上它依賴於R本身的多會話能力,在Windows上它從端口6311開始並檢查它是否仍然是免費的。 如果不是,則端口遞增並再次檢查,如果它是空閑的等等。

檢查空閑端口可能出現問題(您正在使用哪種操作系統?)。

您可以嘗試手動配置端口並顯式啟動不同的本地R服務器,如下所示:

Logger simpleLogger = new Logger() {

        public void println(String string, Level level) {
            if (level == Level.WARNING) {
                p.print("! ");
            } else if (level == Level.ERROR) {
                p.print("!! ");
            }
            p.println(string);
        }

        public void close() {
            p.close();
        }
    };

RserverConf serverConf = new RserverConf(null, staticPortCounter++, null, null, null);
Rdaemon server = new Rdaemon(serverConf, this);
server.start(null);
rsession = Rsession.newInstanceTry(serverConf);

如果這不起作用,請顯示您的Revaluator類的更多代碼,並提供有關您正在運行的操作系統的詳細信息。 此外,應該有幾個日志輸出(至少如果相應地配置了日志級別)。 請粘貼已記錄的消息。

也許它也可以幫助從Google Code獲取rsession的源代碼並使用調試器在Rsession.begin()設置斷點。 也許這有助於弄清楚出了什么問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM