gpt4 book ai didi

java - 如果你在 R 中创建了一个函数,你如何使用 Renjin 在 Java 中调用它?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:06 25 4
gpt4 key购买 nike

假设我在 R 中创建了一个函数,例如

bin <- function(arg1, arg2, arg3) {
//some code here
}

我正在使用 Renjin 在 JVM 上运行 R。在我的 Java 程序中,我想调用我的 R 函数 bin。我知道您首先需要使用类似的东西来访问 R

ScriptEngineManager manager = new ScriptEngineManager();
// create a Renjin engine:
ScriptEngine engine = manager.getEngineByName("Renjin");

但是一旦完成,我该如何访问我的 R 函数?此函数存储在单独的文件中。我知道要运行 R 脚本(我们称之为 script.R),您可以使用

engine.eval(new java.io.FileReader("script.R"));

但这不允许在文件中的函数中传递参数……它只是运行整个过程。

我是否必须在我的 Java 程序中使用 R/Renjin 重写函数?或者有没有一种有效的方法来调用该函数?

谢谢!

最佳答案

当你运行时

engine.eval(new java.io.FileReader("script.R"));

script.R文件被解析,文件中的语句在全局环境中执行。如果你的文件只定义了函数,那么它确实不会被调用。

有几个选项可以执行该函数:

  1. 扩展 script.R 以包含对 bin 的调用,例如

    bin <- function(arg1, arg2, arg3) {
    //some code here
    }
    bin(arg1 = 1, arg2 = 2, arg3 = 3)
  2. 评估script.R,构造和评估Java代码中的命令,例如

    engine.eval(new java.io.FileReader("script.R"));

    其次是

    engine.eval("bin(arg1 = " + 1 + ", arg2 = " + 2 + ", arg3 = " + 3 + ")");
  3. 评估script.R,在全局环境中创建变量,并执行bin函数:

    engine.eval(new java.io.FileReader("script.R"));
    engine.eval("arg1 <- 1; arg2 <- 2; arg3 <- 3");
    engine.eval("bin(arg1, arg2, arg3)");

每个选项都为您提供了不同程度的灵 active ,因此您可以尝试看看哪个最适合您。

关于java - 如果你在 R 中创建了一个函数,你如何使用 Renjin 在 Java 中调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24640249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com