使用Renjin

问题描述

我想在Java中加载和解析RDS / RData文件,我进行了一些谷歌搜索,发现Renjin帮助在Java中调用R函数。 (我不是R开发人员,甚至在^^'之前我都不知道这些文件的存在)

这是我的R代码

my_data <- readRDS("R/outputs_profils_cl8.RDS")

这是我的Java代码

RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory();
RenjinScriptEngine engine = factory.getScriptEngine();
        
engine.eval(new java.io.FileReader("R/script.R"));

我的pom.xml文件

<dependency>
        <groupId>org.renjin</groupId>
        <artifactId>renjin-script-engine</artifactId>
        <version>3.5-beta65</version>
    </dependency>

但是我得到了这个错误

线程“主”中的异常org.renjin.eval.EvalException:无法读取 R 3.5.0编写的工作区版本3;需要R 3.5.0或更高版本 org.renjin.primitives.R $ primitive $ unserializefromConn.applyPromised(R $ primitive $ unserializefromConn.java:42) 在org.renjin.sexp.BuiltinFunction.apply(BuiltinFunction.java:100) 在 org.renjin.primitives.special.InternalFunction.apply(InternalFunction.java:46) 在org.renjin.sexp.FunctionCall.eval(FunctionCall.java:80)在 org.renjin.primitives.special.BeginFunction.apply(BeginFunction.java:39) 在org.renjin.sexp.FunctionCall.eval(FunctionCall.java:80)在 org.renjin.sexp.Closure.applyPromised(Closure.java:200)在 org.renjin.sexp.Closure.apply(Closure.java:133)在 org.renjin.sexp.FunctionCall.eval(FunctionCall.java:80)在 org.renjin.primitives.special.AssignLeftFunction.assignLeft(AssignLeftFunction.java:58) 在 org.renjin.primitives.special.AssignLeftFunction.apply(AssignLeftFunction.java:42) 在org.renjin.sexp.FunctionCall.eval(FunctionCall.java:80) org.renjin.sexp.ExpressionVector.eval(ExpressionVector.java:85)在 org.renjin.eval.Context.evaluate(Context.java:280)在 org.renjin.script.RenjinScriptEngine.eval(RenjinScriptEngine.java:174) 在 org.renjin.script.RenjinScriptEngine.eval(RenjinScriptEngine.java:169) 在 org.renjin.script.RenjinScriptEngine.eval(RenjinScriptEngine.java:148) 在control.Main.main(Main.java:330)

您知道如何解决此问题吗? 我已经按照人人网的安装说明进行操作。

如果您可以提出其他可以解决问题的解决方案/库,我将保持开放态度:)

感谢前进!

解决方法

虽然我确信有很多方法可以做到这一点,但我认为您应该问自己是否应该

.RData不是在不同软件之间存储和传输文件的常规格式。相反,您应该将.Rdata文件中的数据导出为更合适的格式,例如以逗号分隔的值(.csv)。

这些其他格式具有更广泛的支持,并且将在大多数情况下更适用。