从JRI创建的变量在哪里存储在我的磁盘上

时间:2015-10-06 09:11:33

标签: java r jri

我有一个简单的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 
>

1 个答案:

答案 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
相关问题