1

私は Java を使用しており、アドオン R ライブラリを使用し、そのライブラリ内の関数を使用する必要があります。次の質問で提供されている回答を試しました

RスクリプトをJRIにロードしてJavaから実行するにはどうすればよいですか?

R が作成したライブラリを Java/JRI コードにロードする際の問題

しかし、まだ NullPointerException が発生します。誰でもエラーを指摘できますか。ありがとうございました

これが私が使用しているコードです:

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();
}
}
4

1 に答える 1

1

先ほど言及したRパッケージ「PROcess」を探してみましたが、見つからなかったので、コードをテストできませんが、通常、パッケージを追加するとJRIで完璧に機能します。例を次に示します(パッケージ「予測」を使用)および「プライア」):

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();
}
    }
  1. コンソールを見てください。

    run: R に接続 524.0 597.0 530.0 440.0 406.0 435.0 479.0 523.0 580.0 574.0 BUILD SUCCESSFUL (合計時間: 4 秒)

Rの以前のバージョン(3.0ではない)でパッケージ「PROcess」(私が見つけられなかった)をダウンロードしたと思います。その場合は、パッケージをR 3.0フォルダーにリロードしてください。

于 2014-03-11T06:22:19.007 に答える