首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Renjin -如何使用java生成的值

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

Stack Overflow用户
提问于 2013-08-15 06:34:31
回答 2查看 1.4K关注 0票数 4

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

代码语言:javascript
运行
复制
int x = 7;

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-15 06:49:54

您可以将变量作为文字连接到字符串中,正如我在注释中发布的那样:

代码语言:javascript
运行
复制
engine.eval("tmp<-c(" + x + ", 4)");

这是因为(我假设)引擎需要计算文字表达式(使用数字值而不是变量),而上面的表达式实质上通过字符串和整数值的连接(组合)来传递tmp<-c(7, 4)。我还会尝试首先运行一个命令来存储一个变量,然后引用它,即:

代码语言:javascript
运行
复制
engine.eval(x <- 7);

那就试试你原来的表情。不过,我对仁金并不熟悉,所以这是一种暗箱操作。

票数 3
EN

Stack Overflow用户

发布于 2013-09-06 07:32:47

Renjin使用javax.script接口,为您提供了与R环境交互的大量功能。参见这里的文档:guide/

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

代码语言:javascript
运行
复制
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对象,例如:

代码语言:javascript
运行
复制
obj$put("a", 1)
obj$put("b", 2) 

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

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

代码语言:javascript
运行
复制
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;
  }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18247478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档