首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rserve安装错误

Rserve安装错误
EN

Stack Overflow用户
提问于 2014-08-12 08:48:34
回答 2查看 5.1K关注 0票数 1

我想在eclipse上运行一个R脚本。

  • R 3.1.1
  • Ubuntu 12.04
  • 月食开普勒
  • 罐子:

代码语言:javascript
复制
- JRI.jar
- REngine.jar
- RserveEngine.jar

  • 环境(运行->运行配置->环境)

代码语言:javascript
复制
- R\_HOME : /usr/local/lib/R

代码:

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.rosuda.REngine.REXP;
import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;
import org.rosuda.JRI.Rengine;

public class HelloWorldApp {

    public static void main(String[] args) throws RserveException, REXPMismatchException, FileNotFoundException, IOException {
        RConnection c = new RConnection("localhost",6311);
        if(c.isConnected()) {
            System.out.println("Connected to RServe.");
            if(c.needLogin()) {
                System.out.println("Providing Login");
                c.login("username", "password");
            }

            REXP x = c.eval("1:10");
            for(int i=0;i < x.length();i++)
            {
                System.out.println(x.asIntegers()[i]);
            }
            System.out.println("Reading script...");
            Rengine r = new Rengine(args, true, null);

            r.eval(" plot (x");            

        } else {
            System.out.println("Rserve could not connect");
        }

        c.close();
        System.out.println("Session Closed");
    }

}

输出:

代码语言:javascript
复制
Connected to RServe.

1

2

3

4

5

6

7

8

9

10

Reading script...

Fatal error: you must specify '--save', '--no-save' or '--vanilla'

Rstudio中也发生了相同的错误:

代码语言:javascript
复制
library("Rserve")
Rserve()

输出:

代码语言:javascript
复制
Starting Rserve:
/usr/local/lib/R/bin/R CMD /home/mansi/R/x86_64-unknown-linux-gnu-library/3.1/Rserve/libs//Rserve 
Fatal error: you must specify '--save', '--no-save' or '--vanilla'

所以请帮我解决这个致命的错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-03 22:42:42

代码语言:javascript
复制
Try: Rserve(args='--vanilla')

我也有同样的问题,这对我来说很管用。

票数 9
EN

Stack Overflow用户

发布于 2015-09-08 17:04:55

您可以使用与RServe包一起提供的JRI,而不是rJava。

在我看来,JRI比RServe更好,因为它没有创建单独的进程,而是使用本机调用来集成Java和R。

有了JRI,你就不用担心端口、连接、看门狗等等.对R的调用使用操作系统库(libjri)完成。

这些方法非常类似于RServe,您仍然可以使用REXP对象。

有一个例子:

代码语言:javascript
复制
public void testMeanFunction() {

    // just making sure we have the right version of everything
    if (!Rengine.versionCheck()) {
        System.err.println("** Version mismatch - Java files don't match library version.");
        fail(String.format("Invalid versions. Rengine must have the same version of native library. Rengine version: %d. RNI library version: %d", Rengine.getVersion(), Rengine.rniGetVersion()));
    }

    // Enables debug traces
    Rengine.DEBUG = 1;

    System.out.println("Creating Rengine (with arguments)");
    // 1) we pass the arguments from the command line
    // 2) we won't use the main loop at first, we'll start it later
    // (that's the "false" as second argument)
    // 3) no callback class will be used
    engine = REngine.engineForClass("org.rosuda.REngine.JRI.JRIEngine", new String[] { "--no-save" }, null, false);
    System.out.println("Rengine created...");

    engine.parseAndEval("rVector=c(1,2,3,4,5)");
    REXP result = engine.parseAndEval("meanVal=mean(rVector)");
    // generic vectors are RVector to accomodate names
    assertThat(result.asDouble()).isEqualTo(3.0);
}

我有一个演示项目,它公开一个REST并使用这个包调用R函数。

看看:https://github.com/jfcorugedo/RJavaServer

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25259950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档