我正在使用RCaller从Java调用R。请参阅以下Java代码:
RCaller caller = new RCaller();
RCode code = new RCode();
caller.setRscriptExecutable("/usr/bin/Rscript");
caller.cleanRCode();
String x = "is.installed <- function(mypkg){ \n" +
"is.element(mypkg, installed.packages()[,1])\n"+
"}\n" +
"is.installed(\"bbmle\")";
StringBuffer s = new StringBuffer(x);
code.setCode(s);
System.out.println(x);
caller.setRCode(code);
caller.redirectROutputToConsole();
caller.runOnly();
这是Java输出。请注意,Rcaller如何决定在R代码的末尾添加
q
(请参见下面输出中的第二行)。这是怎么回事?请注意,当我打印输出时,这里没有q
。is.installed <- function(mypkg){
is.element(mypkg, installed.packages()[,1])
}
is.installed("bbmle")
Error:Error: unexpected symbol in "is.installed("bbmle")q"
Error:Execution halted
最佳答案
RCaller发送一个
q("yes")
命令传递给R(在RunOnly()方法中),但是当您忘记在代码的末尾添加回车符时,根本无法将所有R代码都发送给R(仅发送q部分)。采用
is.installed(\"bbmle\")\n
代替。