我在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;是一个最小尺寸的文件。
答案 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
注意几个不同之处:
REXP load=
re.eval("source...
.R
这段代码工作很好,如果能解决问题,请告诉我。