如何将附加R库加载到JRI并从Java执行?
我正在使用Java,我需要使用一个附加的R库,并使用该库中的函数。我尝试了以下问题中提供的答案 但我还是得到了一个NullPointerException。有人能指出错误吗。谢谢 以下是我正在使用的代码:如何将附加R库加载到JRI并从Java执行?,java,r,rjava,jri,Java,R,Rjava,Jri,我正在使用Java,我需要使用一个附加的R库,并使用该库中的函数。我尝试了以下问题中提供的答案 但我还是得到了一个NullPointerException。有人能指出错误吗。谢谢 以下是我正在使用的代码: import org.rosuda.JRI.REXP; import org.rosuda.JRI.RVector; import org.rosuda.JRI.Rengine; public class RConnect { public void processFiles(Str
import org.rosuda.JRI.REXP;
import org.rosuda.JRI.RVector;
import org.rosuda.JRI.Rengine;
public class RConnect {
public void processFiles(String[] spectrumData)
{
// new R-engine
Rengine re=new Rengine (new String [] {"--vanilla"}, false, null);
if (!re.waitForR())
{
System.out.println ("Unable to load R");
return;
}
else
System.out.println ("Connected to R");
REXP rexpSetFolder = re.eval("setwd('/home/user/R/x86_64-pc-linux-gnu-library/3.0')");
REXP rexpFolder = re.eval("getwd()");
System.out.println(rexpFolder.asString());
REXP rexpLoad = re.eval("library(PROcess)");
RVector f1 = (re.eval("read.files(spectrumData)").asVector());
System.out.println(f1);
re.end();
}
}
我试图寻找您刚才提到的R包“流程”,但我没有找到,因此我无法测试您的代码,但一般来说,附加包在JRI中工作得很好,下面是一个示例(使用包“forecast”和“plyr”):
import org.rosuda.JRI.REXP;
导入org.rosuda.JRI.RVector;
导入org.rosuda.JRI.Rengine;
/**
*
*@作者yschellekens
*/
公共类堆栈覆盖{
私人静态双[]预测;
私有静态int i;
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
//新型R型发动机
Rengine re=new-Rengine(新字符串[]{--vanilla},false,null);
如果(!re.waitForR())
{
System.out.println(“无法加载R”);
返回;
}
其他的
System.out.println(“连接到R”);
re.eval(“load(file='C:/Users/yschellekens.INTRANET/Desktop/java projects/count_basic.Rda'),false);
关于评估(“图书馆(plyr)”;
关于评估(“图书馆(预测)”;
re.eval(“count_basic我试图查找您刚才提到的R包“PROcess”,但我没有找到它,因此我无法测试您的代码,但一般来说,附加包在JRI中工作得很好,下面是一个示例(使用包“forecast”和“plyr”):
import org.rosuda.JRI.REXP;
导入org.rosuda.JRI.RVector;
导入org.rosuda.JRI.Rengine;
/**
*
*@作者yschellekens
*/
公共类堆栈覆盖{
私人静态双[]预测;
私有静态int i;
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
//新型R型发动机
Rengine re=new-Rengine(新字符串[]{--vanilla},false,null);
如果(!re.waitForR())
{
System.out.println(“无法加载R”);
返回;
}
其他的
System.out.println(“连接到R”);
re.eval(“load(file='C:/Users/yschellekens.INTRANET/Desktop/java projects/count_basic.Rda'),false);
关于评估(“图书馆(plyr)”;
关于评估(“图书馆(预测)”;
re.eval(“count_basicI试图做一个类似的事情,它抛出NPE。我为它创建了一个,你能看一下吗?我试图做一个类似的事情,它抛出NPE。我为它创建了一个,你能看一下吗?”?
import org.rosuda.JRI.REXP;
import org.rosuda.JRI.RVector;
import org.rosuda.JRI.Rengine;
/**
*
* @author yschellekens
*/
public class StackOverfolw {
private static double[] foreCast;
private static int i;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// new R-engine
Rengine re=new Rengine (new String [] {"--vanilla"}, false, null);
if (!re.waitForR())
{
System.out.println ("Unable to load R");
return;
}
else
System.out.println ("Connected to R");
re.eval("load(file='C:/Users/yschellekens.INTRANET/Desktop/java projects/count_basic.Rda') ", false);
re.eval("library(plyr)");
re.eval("library(forecast)");
re.eval("count_basic<-arrange(count_basic,TKDate)");
re.eval("ts1<-ts(count_basic$click_count,frequency=7)");
re.eval("value<-stl(x=ts1,s.window=7)");
re.eval("fit <- auto.arima(ts1)");
re.eval("fit2<-forecast(fit,h=30)");
re.eval("value3<-as.numeric(fit2$mean)");
REXP testYvalue = re.eval("c(as.numeric(fit2$fitted),as.numeric(fit2$mean))");
foreCast=testYvalue.asDoubleArray();
for (i = 0; i < 10 ; i++) {
System.out.println(foreCast[i]);;}
re.end();
}
}