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