我有一个简单的JRI代码:
<%
Rengine re = Rengine.getMainEngine();
if (re==null){
re = new Rengine (new String [] {"--vanilla"}, false, null);
}
re.eval("pull_data2 <- function(...){df3 <<- read.csv(file=\"/tmp/data.csv\", header=T)}");
re.eval("pull_data2()");
String val = re.eval("df3").toString();
%>
<h3><%=val%></h3>
我的浏览器上会打印这些值,表示已填充df3。
但是当我在磁盘上登录R时,没有这样的“df3”变量。那么,我怎样才能从后端看到变量?
> df3
Error: object 'df3' not found
>
答案 0 :(得分:0)
考虑使用org.rosuda.REngine.REngine
引擎类。通过这个,您可以轻松配置R控制台输出,该输出允许通过服务器(后端)日志跟踪R变量分配和R数据处理。这是您可以检查与JVM一起运行的REngine实例中实际加载的数据的方式(AFAIK与您在计算机上打开的R控制台不同)
见下面的例子。
REngine re = REngine.getLastEngine();
if (re==null){
re = REngine.engineForClass("org.rosuda.REngine.JRI.JRIEngine",
new String [] {"--vanilla"},
new REngineStdOutput(), // R console output
false);
}
re.parseAndEval("myfunction <- function() {myvar <<- \"something\"; print(paste0(\"logging 'myvar' in R:\", myvar));}");
re.parseAndEval("myfunction()");
REXP jriObj = re.parseAndEval("myvar");
String myvar = jriObj.asString();
System.out.println("logging 'myvar' in Java: " + myvar);
日志如下:
[1] "logging 'myvar' in R:something"
logging 'myvar' in Java: something