2017-05-30 24 views
3

我正在使用Rserve從java調用r腳本。該程序運行並終止,但不輸出我想要的。在我的R腳本中,我有多個打印語句,所以理論上當我的java程序運行時,它應該打印這些語句。但是我的java程序正在打印我rscript的路徑,而不是實際的r腳本內容。從java運行rscript不顯示任何結果

我該怎麼辦?我如何知道我的腳本是否正確運行?

ř腳本:

library(Rserve) 
Rserve() 
print(323325) 
print("Hellow world this is an R script") 
print("R script ran successfully") 
print("Running") 

Java程序:

public static void main(String[] args) throws REXPMismatchException, REngineException{ 

     RConnection c = new RConnection(); 
     //REXP rengine = c.eval("R.version.string"); 
     //rengine = c.eval("source('./src/main/resources/Script/DB.R')"); 
     //System.out.println(rengine.asString()); 



     REXP rResponseObject = c.parseAndEval("try(eval('./src/main/resources/Script/DB.R'),silent=TRUE)"); 
     System.out.println(rResponseObject.asString()); 
     if (rResponseObject.inherits("try-error")) { 
      System.err.println("Error: " + rResponseObject.asString()); 
     } 


    } 

實際輸出:

./src/main/resources/Script/DB.R

所需輸出:

[1] 「Hellow世界這是R腳本」 [1] 「R腳本成功運行」 [1] 「運行」

回答

0

我解決了這個問題。我的腳本現在正在正確運行並執行它應該執行的操作。

在我的[R腳本文件,我創建了一個功能,並將該功能

內我整個R代碼裏面。在我的java程序,我給這樣的我 - [R腳本的路徑:

c.eval("source(\"DataPull.R\")"); 

然後我打電話給我的腳本的功能,並檢查這樣的錯誤:

REXP r = c.parseAndEval("try(eval(myAdd()),silent=TRUE)"); 
     if (r.inherits("try-error")) System.err.println("Error: "+r.asString()); 
      else System.out.println("Success eval 2"); 

它的工作。

這裏是我的Java程序文件:

public static void main(String[] args) throws REXPMismatchException, REngineException, IOException{ 

     RConnection c = new RConnection(); 
     c.eval("source(\"DataPull.R\")"); 
     REXP r = c.parseAndEval("try(eval(myAdd()),silent=TRUE)"); 
     if (r.inherits("try-error")) System.err.println("Error: "+r.asString()); 
      else System.out.println("Success eval 2"); 
    } 

這裏是我的[R腳本文件:

myAdd <- function(){ 
    library(Rserve) 
    Rserve() 
    print(323325) 
    print("Hellow world this is an R script") 
    print("R script ran successfully") 
    print("Running") 
} 
0

eval計算表達式。​​是一個評估自己的常量字符串。

你可能想要的是source

+0

我在eval語句添加源。但是現在它給了我這樣的輸出:source(「C:\ Users \ Ruttab \ workspace \ RServe \ src \ main \ resources \ Script \ DB.R」) –

+0

不,您應該使用source_instead_of_ eval。 –