【问题标题】:Need to pass Arraylist from java program to R script as a parameter需要将 Arraylist 从 java 程序传递给 R 脚本作为参数
【发布时间】:2021-01-12 11:26:24
【问题描述】:

我有一个简单的 java 程序,它从 csv 文件中读取数据并验证数据,然后调用 R 脚本来计算值列表的平均值,我正在使用 Renjin 来调用 R 程序。 我可以在不传递参数的情况下调用 R 脚本,但在这里我需要将值列表传递给我的 R 脚本。

这是我的java代码:

// listofval --list of float values example listofval= [3.3,5.2,6,9]

RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine();
engine.put("input",listofval);
engine.eval(new java.io.FileReader("avg.R"));

这是我的脚本:

args=(commandArgs(TRUE))
args <- eval(parse(text=args[1]))
input <- args
customMean <- function(vector) {
mean(vector)
}
result.mean<- customMean(input)
print(result.mean)

我正在寻找工作,有人可以帮我解决这个问题吗?

提前致谢。

【问题讨论】:

    标签: java r spring spring-boot microservices


    【解决方案1】:

    您可以尝试使用 java 中的会话将参数传递给您的引擎。

    请自定义和/或尝试以下逻辑。

    Session session = new SessionBuilder()
    .withDefaultPackages()
    .build();
    
    session.setCommandLineArguments("/usr/bin/renjin", "X", "Y", "--args", "Z");
    
    RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory();
    RenjinScriptEngine engine = factory.getScriptEngine(session);
    
    engine.eval("print(commandArgs(trailingOnly = FALSE))"); 
    engine.eval("print(commandArgs(trailingOnly = TRUE))");  
    

    【讨论】:

    • 嗨 Ahmet Eroğlu,感谢您的回答,我尝试了这种方法脚本正在运行,但它没有接受参数。
    【解决方案2】:

    我能够解决我的问题,希望它可以帮助别人! 在 R 脚本中,我们需要删除下面的行,以便程序不需要命令行参数。

    args=(commandArgs(TRUE))    
    args <- eval(parse(text=args[1]))
    input <- args
    

    在 java 程序中我将我的参数保存为输入,在 R 环境中它将作为输入访问

    engine.put("input",listofval);
    

    最终的脚本:

    customMean <- function(vector) {
     return mean(vector)
    }
    result.mean<- customMean(input)
    

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多