Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java中的R模型进行多模型预测?_Java_R_Data Mining_Predict - Fatal编程技术网

如何使用java中的R模型进行多模型预测?

如何使用java中的R模型进行多模型预测?,java,r,data-mining,predict,Java,R,Data Mining,Predict,我有一个构造器: public Revaluator(File model,PrintStream ps) { modelFile=model; rsession=Rsession.newInstanceTry(ps, null); rsession.eval("library(e1071)"); rsession.load(modelFile); } 我想加载一个模型并用它进行预测。 Rsession.newInstanceTry(ps,null)的问题始终

我有一个构造器:

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

}
我想加载一个模型并用它进行预测。
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会话

您尚未在问题中粘贴所有代码,因此在尝试以下(复杂)方法之前,请排除简单原因,并确保您的字段
modelFile
rsession
未声明为静态:-)

如果不是:

似乎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);
如果这不起作用,请显示您的
重估者
类的更多代码,并提供您正在运行的操作系统的详细信息。此外,应该有多个日志输出(至少在相应配置日志级别的情况下)。请同时粘贴已记录的消息


也许从中获取rsession的源代码并使用调试器在
rsession.begin()
中设置断点也会有所帮助。也许这有助于找出问题所在

在OSX上开发,生产是UBUNTU,不管怎样,它是有效的,thanx!