我们说我在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重写函数?或者有一种有效的方法来调用函数吗?
谢谢!
答案 0 :(得分:3)
运行时
engine.eval(new java.io.FileReader("script.R"));
解析script.R
文件,并在全局环境中执行文件中的语句。如果您的文件只定义了函数,那么它确实不会被调用。
执行该功能有几个选项:
延长script.R
以包含对bin
的调用,例如
bin <- function(arg1, arg2, arg3) {
//some code here
}
bin(arg1 = 1, arg2 = 2, arg3 = 3)
评估script.R
,在Java代码中构造和评估命令,例如
engine.eval(new java.io.FileReader("script.R"));
接着是
engine.eval("bin(arg1 = " + 1 + ", arg2 = " + 2 + ", arg3 = " + 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)");
每个选项都为您提供不同级别的灵活性,因此您可以尝试查看最适合您的选项。