gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:35:38 29 4
gpt4 key购买 nike

我正在尝试从我的 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com