【问题标题】:How I can load add-on R libraries into JRI and execute from Java?如何将附加 R 库加载到 JRI 并从 Java 执行?
【发布时间】:2013-06-12 13:48:24
【问题描述】:

我正在使用 Java,我需要使用附加 R 库并使用该库中的函数。我尝试了以下问题中提供的答案

How I can load a R script into JRI and execute from Java?

Problem loading R own created libraries in Java/JRI code

但我仍然收到 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();
}
}

【问题讨论】:

    标签: java r rjava jri


    【解决方案1】:

    我试图寻找你刚才提到的 R 包“PROcess”,但我没有找到它,所以我无法测试你的代码,但通常添加包在 JRI 中完美运行,这是一个示例(使用包“预测”和“plyr”):

    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. 现在看看控制台:

      运行: 连接到 R 524.0 597.0 530.0 440.0 406.0 435.0 479.0 523.0 580.0 574.0 构建成功(总时间:4 秒)

    我猜你在早期版本的 R(不是 3.0)上下载了包“PROcess”(我找不到),如果是这种情况,只需将包重新加载到 R 3.0 文件夹中。

    【讨论】:

    • 我尝试做类似的事情,但它抛出了 NPE。我为它创建了一个question,你能看一下吗?
    猜你喜欢
    • 2011-12-23
    • 2018-01-17
    • 2018-02-02
    • 2015-03-19
    • 2014-01-08
    • 2011-01-29
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    相关资源
    最近更新 更多