我得到了一个名为 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程序根本没有做任何事情。
你知道问题是什么吗?
答案 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();