2017-05-30 16 views
3

Rserveを使用してrスクリプトをJavaから呼び出しています。プログラムは実行され、終了しますが、私が望むものは出力しません。私のRスクリプトでは、私は理論的には私のJavaプログラムがそれらのステートメントを印刷する必要が実行されるので、複数の印刷ステートメントがあります。しかし、私のJavaプログラムは実際のrスクリプトの内容ではなく、私のrscriptのパスを表示しています。Javaからrscriptを実行していない結果が表示されます

どうすればよいですか?スクリプトが正しく実行されているかどうかを確認するにはどうすればよいですか?

Rスクリプト:

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] [1]

答えて

0

私はこの問題を解決しました。私のスクリプトは今、正しく動作していると思われる動作を実行しています。その後

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

:私のRスクリプトファイルで

が、私は機能を作成し、私のJavaプログラムでは、その関数

以内に私の全体のRコードを入れて、私はこのように私の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 "を実行すると、" 式を評価 を "Rスクリプトが正常に実行されました"。​​は、それ自身を評価する定数文字列です。

おそらく何がほしいですかsourceです。

+0

私は私のeval文でソースを追加しました。しかし、これで私の出力は次のようになります。source( "C:¥Users¥Ruttab¥workspace¥RServe¥src¥main¥resources¥Script¥DB.R") –

+0

いいえ、source_instead_of_ evalを使用してください。 –

関連する問題