从Java运行R程序

时间:2016-01-15 10:28:11

标签: java r

我得到了一个名为 hello.R 的简单R程序:

print('hello')

我现在想从Java调用此代码。 这是我在Java中的代码:

import java.io.IOException;

public class Main {

    public static void main(String[] args) {
        String path = "C:\\Users\\Administrator\\Desktop\\hello.R";
        try {
            Runtime.getRuntime().exec("C:\\Program Files\\R\\R-3.1.3\\bin\\Rscript "+path);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

    }

}

我期待它在Java concole中打印hello语句。但Java程序根本没有做任何事情。

你知道问题是什么吗?

2 个答案:

答案 0 :(得分:0)

基于this answer我认为您应该执行以下操作:

ProcessBuilder pb = new ProcessBuilder("/path/to/Rscript", "/path/to/hello.r");
pb.redirectOutput(Redirect.INHERIT);
pb.redirectError(Redirect.INHERIT);
Process p = pb.start();

这会将输出流和子流程的错误流重定向到当前进程,从而允许您在Java控制台中观察内容。

答案 1 :(得分:0)

您可以尝试以下方法在Java中获取hello字符串:

#* @get /hello
hello <- function() {
  print("hello")
}

您可以运行以下命令:

library(plumber)
r <- plumb("hello.R")
r$run(port=8080)

如果您再调用该页面

http://localhost:8080/hello

您的R代码将被执行。

如果你想从Java执行它,解决方案可能是:

   URL url = new URL("http://localhost:8080/hello");
   URLConnection connection = url.openConnection();
   BufferedReader br = new BufferedReader(new InputStreamReader( (connection.getInputStream())));
   String result = br.readLine();