1

Windows 7 で 32 ビット R 3.0.2 と Java jdk1.7.0_45 を使用して、NetBeans 7.4 で実行する JRI をインストールしました。

次のJava関数を使用しています。

import org.rosuda.JRI.Rengine;
import org.rosuda.JRI.REXP;
import org.rosuda.JRI.RList;

void testJRI(){

    // Start JRI engine. 
    String[] Rargs = {"--vanilla"};
    Rengine re = new Rengine(Rargs, false, null);

    if (!re.waitForR()) {
        System.out.println("Cannot load R");
        return null;
    }

    REXP load=re.eval("source('C:\\\\searchPath\\\\nonparametricAnova.r')");
    re.end();

    return;
}

関数が初めて呼び出されたときは、すべて正常に動作します。しかし、2 回目は変数 load が null で、失敗を示しています。

nonparametricAnova.r R 関数を次の単純なスクリプトに置き換えました。

simple<-function(){
  a=1
  a
}

これに simple.r という名前を付けて呼び出しました

    REXP load=re.eval("source('C:\\\\searchPath\\\\simple.r')");

今、2回目で、それはハングアップします

Rengine re = new Rengine(Rargs, false, null);

私はそれに気づいた

load=re.eval("refClusterMeasurements<-read.csv(\"C:/SearchPath/fileName.csv\", header=TRUE)");

「name.csv」が最小サイズのファイルであっても、2 回目も失敗します。

4

1 に答える 1

1

このバージョンは動作します:

package stackoverflow;

import org.rosuda.JRI.REXP;
import org.rosuda.JRI.Rengine;

/**
 *
 * @author yschellekens
 */
public class StackOverflow {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {




 // Start JRI engine. 
    String[] Rargs = {"--vanilla"};
    Rengine re = new Rengine(Rargs, false, null);

      re.eval("source('C:/Users/yschellekens.INTRANET/Desktop/java projects/simple.R')");
       REXP value =re.eval("as.integer(a<-simple())");
   int a  = value.asInt();
        System.out.println(a);


    }
} 

次の R ファイルを使用します。

simple<-function(){
  a=1
  return(a)
}

Java 出力:

run:
1

いくつかの違いに注意してください。

  1. REXP load=の前に使用しないでください。re.eval("source...
  2. rファイルを保存します.R
  3. ダッシュを次のように変更します。/

このコードは何度も問題なく機能します。問題が解決したかどうか教えてください。

于 2014-04-20T06:08:33.760 に答える