第二次调用re.eval(" source())失败了JRI

时间:2014-04-07 22:20:55

标签: java r jri

我在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;
}

第一次调用该函数时,一切正常。但第二次,变量load是null - 表示失败。

我用以下简单脚本替换了nonparametricAnova.r R函数

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

我将simple.r命名为

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

现在,第二次,它挂起

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

我注意到了

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

第二次也失败了,即使&#34; name.csv&#34;是一个最小尺寸的文件。

1 个答案:

答案 0 :(得分: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. 请勿在{{1​​}}
  2. 之前使用REXP load=
  3. 使用re.eval("source...
  4. 保存您的r文件
  5. 将破折号更改为:.R
  6. 这段代码工作很好,如果能解决问题,请告诉我。