[英]Rserve: Connection Refused: Connect
我正在尝试从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)
我使用了来自教程和AFAIK的示例代码,但Java文件中未执行TestRserve。 我也尝试过类似下面的方法来执行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
}
}
以下是堆栈跟踪
线程“主”中的异常org.rosuda.REngine.Rserve.RserveException:无法连接:连接被拒绝:在org.rosuda.REngine.Rserve的org.rosuda.REngine.Rserve.RConnection。(RConnection.java:88)连接。 org.rosuda.REngine.Rserve.RConnection。(RConnection.java:44)处的RConnection。(RConnection.java:60)在functionTest.HelloWorldApp.main(HelloWorldApp.java:17)处
从代码中可以看出很多关于Rserve的误解。
首先,Rserve是服务器,Rserve JAR文件提供了与Rserve进行交互的客户端实现,就像npm
上有JavaScript客户端一样。
因此,要通过Rserve调用R脚本,Rserve服务器需要已经启动并等待接收呼叫。 可以从R使用以下命令完成:
library(Rserve)
Rserve()
或: R CMD Rserve --vanilla
直接从linux bash调用,或者直接使用JavaRuntime API从Java调用它来访问运行时:
Process p = Runtime.getRuntime().exec("R CMD RServe --vanilla");
尽管这也仅适用于linux。
然后,您应该执行Java客户端代码以通过Rserve连接到Rserve服务器并使用所有R命令eval()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.