java - Renjin - 如何使用java生成的值

标签 java r jri renjin

我正在使用 renjin,我正在尝试使用我在 java 代码中生成的值和 r 代码,例如:

int x = 7;

try
{
   engine.eval("tmp<-c(x, 4)");
   engine.eval("print(tmp)");
}
catch (ScriptException ex) 
{
   ;
}

但是,这不起作用,因为引擎显然不能与 x 一起工作。有解决这个问题的简单方法吗?

最佳答案

Renjin 使用 javax.script 接口(interface),为您提供与 R 环境交互的强大功能。请参阅此处的文档: http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/

要在 R 的全局环境中设置变量,可以使用 put() 方法。以下是一些示例:

engine.put("x", 4);
engine.put("y", new double[] { 1d, 2d, 3d, 4d });
engine.put("z", new org.renjin.sexp.DoubleArrayVector(1,2,3,4,5));
engine.put("obj", new HashMap());

Renjin 会将基元、基元数组和 java.lang.String 实例隐式转换为 R 对象。 Java 对象将被包装为 R external 对象。

在 R 代码中,Renjin 允许您使用 $ 运算符操作 Java 对象,例如:

obj$put("a", 1)
obj$put("b", 2) 

print(obj$size())
print(obj$get("b"))

您还可以通过扩展 org.renjin.sexp 包中的类来提供自己的 R 对象实现。例如:

public class MyDoubleVector extends DoubleVector {

  public double getElementAsDouble(int index) {
       // lookup value in database
       return index;
  }

  public int length() {
       // query length in database
       return length;
  }
}

关于java - Renjin - 如何使用java生成的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18247478/

相关文章:

r - 取消嵌套具有不同数据类型的 tibbles 列表列(不能组合 double 和字符)

java - 如何从java执行R脚本文件

r - 如果它是 "quoted",我如何拆分字符串并忽略分隔符

java - 第二次调用 re.eval("source()) 因 JRI 失败

java - 从 R 获取长值到 java

Tomcat5.5服务器Java "Given final block not properly padded"异常

java - 如何读取文件并保存到 hashmap 中,然后将第一个元素保存为键,其余元素保存在集合中?

java - 如何在 Maven 中指定不同版本的 Standard DocLet?

Java7 Bootstrap : Checking class without loading?

r - 如何用ggplot对齐两个图?