从 JRI 创建的变量存储在我的磁盘上的什么位置

Where does a variable created from JRI gets stored on my disk

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

考虑使用 org.rosuda.REngine.REngine 引擎 class。有了这个,您可以轻松配置 R 控制台输出,允许通过服务器(后端)日志跟踪 R 变量分配和 R 数据处理。这是您可以检查实际加载到与 JVM 一起运行的 REngine 实例中的数据的方法(据我所知,这与您在计算机上打开的 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