2015-10-06 28 views
0

上我有一個簡單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 
> 
+0

R不使用磁盤上的工作區(不同於S),所以變量僅在R會話的存儲器中存在。如果你想把它存儲到磁盤上,你必須明確地使用它(使用'saveRDS'或類似的方法)。 –

回答

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