java - 保留:连接被拒绝:连接

标签 java r exception rserve

我正在尝试从我的 Java 代码执行 R 脚本。 这是我的java代码

package pkg;

import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;

public class Temp {
public static void main(String a[]) {
    RConnection connection = null;

    try {
        /* Create a connection to Rserve instance running on default port
         * 6311
         */
        connection = new RConnection();

        connection.eval("source('D:\\\\r script\\\\TestRserve.R')");
        connection.eval("Rserve()");
        int num1=10;
        int num2=20;
        int sum=connection.eval("myAdd("+num1+","+num2+")").asInteger();
        System.out.println("The sum is=" + sum);
    } catch (RserveException e) {
        e.printStackTrace();
    } catch (REXPMismatchException e) {
        e.printStackTrace();
    }
}
}

TestRserve.R如下

  library(Rserve)
  Rserve()
  x= matrix(c(1,2,3,4,5,6))
  plot.ts(x)

我使用了教程中的示例代码,据我所知,TestRserve 没有在 Java 文件中执行。我也尝试过类似下面的方法来执行 TestRserve.R

        REXP x;
        System.out.println("Reading script...");
        File file = new File("D:\\r script\\TestRserve.R");
        try(BufferedReader br = new BufferedReader(new FileReader(file))) {
            for(String line; (line = br.readLine()) != null; ) {
                System.out.println(line);
                x = c.eval(line);         // evaluates line in R
                System.out.println(x);    // prints result
            }
        }

以下是堆栈跟踪

Exception in thread "main" org.rosuda.REngine.Rserve.RserveException: Cannot connect: Connection refused: connect at org.rosuda.REngine.Rserve.RConnection.(RConnection.java:88) at org.rosuda.REngine.Rserve.RConnection.(RConnection.java:60) at org.rosuda.REngine.Rserve.RConnection.(RConnection.java:44) at functionTest.HelloWorldApp.main(HelloWorldApp.java:17)

最佳答案

从您的代码中可以看出对 Rserve 有很多误解。

首先,Rserve 是一个服务器,Rserve JAR 文件提供了与 Rserve 交互的客户端实现,就像 npm 上的 JavaScript 客户端一样。

因此,要通过Rserve调用R脚本,Rserve服务器需要已经启动并等待接收调用。这可以通过 R 使用以下方法完成:

library(Rserve)
Rserve()

或者,: 直接来自 linux bash 的 R CMD Rserve --vanilla 或者,使用 JavaRuntime API 直接从 Java 调用它来访问运行时:

Process p = Runtime.getRuntime().exec("R CMD RServe --vanilla");

尽管这也仅适用于 Linux。

然后您应该执行 Java 客户端代码以连接到 Rserve 服务器并通过 Rserve eval() 所有 R 命令。

关于java - 保留:连接被拒绝:连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38970392/

相关文章:

java - 如何从当前时间戳中减去一个小时

r - 虚拟变量到 R 中的单个分类变量(因子)

R igraph - 保存布局?

java - Mockito 检查异常对此方法无效

java - 配置 Xerces SAX 解析器以容忍 XML 语法错误

java - 新 Mavenized 项目 - 找不到类路径

java - 我如何反省 freemarker 模板以找出它使用的变量?

r - 提高大型矩阵中加权 Jaccard 计算的性能

java - 我正在尝试将我的应用程序从 Spring 转移到 Spring Boot,但遇到了一些问题。特别是以下异常

c# - 异常抛出最佳实践