无法在Java中使用rJava(JRI)运行与字符串相关的函数
我用Java(eclipse)编写了一个小程序,使用JRI(rjava)运行R。所有路径都已设置。问题是,虽然我可以运行数字函数(如无法在Java中使用rJava(JRI)运行与字符串相关的函数,java,r,rjava,jri,Java,R,Rjava,Jri,我用Java(eclipse)编写了一个小程序,使用JRI(rjava)运行R。所有路径都已设置。问题是,虽然我可以运行数字函数(如add),但不能运行字符串函数(如cat)。(请原谅任何错误;我昨天第一次做了Java编码) 请帮助我理解为什么像cat这样的字符串函数不起作用。 以下是我当前获得的输出: ##############libpath=C:\Users\myname\Documents\R\win-library\3.3\rJava\jri\x64 Connected to R lo
add
),但不能运行字符串函数(如cat
)。(请原谅任何错误;我昨天第一次做了Java编码)
请帮助我理解为什么像cat
这样的字符串函数不起作用。
以下是我当前获得的输出:
##############libpath=C:\Users\myname\Documents\R\win-library\3.3\rJava\jri\x64
Connected to R
loading RScript file || completed
mvalue=3.0
method to be called in RScript is cat("Advisory","Assurance")
null
为什么我最终会得到
null
?我应该得到咨询保证
下面是一个如何将R输出显示为Java的示例。您基本上必须实现
它不会为您自动将R控制台“stdout”连接到Java“stdout”。您可以通过获取控制台输出的自动回调,但这意味着有一个主循环。使用
capture.output()
包装cat
调用将使您能够以字符串形式获得结果(在示例代码中分配给值
)。您可以将,file='/some/dir/和/file.txt'
添加到cat
调用中,并读取该文件的输出。
##############libpath=C:\Users\myname\Documents\R\win-library\3.3\rJava\jri\x64
Connected to R
loading RScript file || completed
mvalue=3.0
method to be called in RScript is cat("Advisory","Assurance")
null
import org.rosuda.JRI.RMainLoopCallbacks;
import org.rosuda.JRI.Rengine;
import java.util.logging.Logger;
public class Runner {
private static Logger log = Logger.getLogger("Runner");
static class LoggingConsole implements RMainLoopCallbacks {
private Logger log;
LoggingConsole(Logger log) {
this.log = log;
}
public void rWriteConsole(Rengine re, String text, int oType) {
log.info(String.format("rWriteConsole: %s", text));
}
public void rBusy(Rengine re, int which) {
log.info(String.format("rBusy: %s", which));
}
public void rShowMessage(Rengine re, String message) {
log.info(String.format("rShowMessage: %s", message));
}
public String rReadConsole(Rengine re, String prompt, int addToHistory) {
return null;
}
public String rChooseFile(Rengine re, int newFile) {
return null;
}
public void rFlushConsole(Rengine re) {
}
public void rLoadHistory(Rengine re, String filename) {
}
public void rSaveHistory(Rengine re, String filename) {
}
}
Rengine engine = new Rengine(new String[] {"--no-save"}, false, new LoggingConsole(log));
...
// Use the engine somewhere to evaluate a R method and see the output
engine.eval(rScriptSourceFile);
}