0

我目前正在使用 Java 包 JRI,以便使用 R 提供的一些功能。

假设,我的 R 命令如下所示:

qqnorm(sql_data[["LifeExpectancy"]],
main="Life Expectancy")

如果我将它放入我的 REngine.eval() 函数中,它会崩溃,因为我应该将整个命令输入到一个“eval()”命令中。它可以在我的普通 R 命令行中运行...

主要问题是,无论何时下一个订单是否拆分为多行,我都很难预测。那么,我该如何解决这个问题呢?

我想过计算括号,但括号的数量并不总是均匀的。(比方说,字符串中包含一些括号)还有其他想法吗?

编辑:我认为,我的观点不够明显。试试这个:

System.out.println(re.eval("a <- c(3,4)"));
System.out.println(re.eval("a"));

System.out.println(re.eval("b <- c(3,4")); 
System.out.println(re.eval(",5)"));
System.out.println(re.eval("b"));

您会看到,对于前两个命令 a,您会收到

[REAL* (3.0, 4.0)] 
[REAL* (3.0, 4.0)]

但其余的 b 是这样的:

[NULL ]
[NULL ]
null

一般来说,这是 R 的一个问题。通常这有效,但在 JRI 中无效!

4

1 回答 1

0

首先,看着 System.out.println(re.eval("b <- c(3,4"));我注意到您的错误在 R 中,(错字 - 错过了第二个括号),请参阅以下代码,它有效:

package stackoverflow;

import org.rosuda.JRI.REXP;
import org.rosuda.JRI.Rengine;
/**
 *
 * @author yschellekens
 */
public class StackOverflow {  

   public static void main(String[] args) throws Exception {
    String[] Rargs = {"--vanilla"};
     Rengine rengine = new Rengine(  Rargs, false, null);
        rengine.eval("b <- c(3,4)");
          REXP result=  rengine.eval("b[1]");
      System.out.println(result.asDouble());
   }
}

Java 输出:

run:
3.0

请注意,您不能直接传递给System.out.println 对象Rengine ,您需要REXP先将其转换为对象(参见代码)。

还有你的第一个例子

qqnorm(sql_data[["LifeExpectancy"]],
main="Life Expectancy") 

包括内部“”,因此可能是崩溃的另一个原因

请使用:'',如下所示:

 qqnorm(sql_data[['LifeExpectancy']],
    main='Life Expectancy') 
于 2015-02-04T13:12:18.913 回答