renjin将rds转换为json失败

问题描述

尝试通过Java将在RDS文件中找到的各种数据类型的对象转换为JSON字符串。下面的两个示例都可以直接在CL上使用R解释器正常工作。

jsonlitejsonify导致不同的错误在这两种情况下,在评估值jcmd时都会引发异常。该问题似乎与数据类型转换有关。那是一本正确的书吗?如果是,那是从哪里开始解决问题的?

RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine();
String cmd = String.format("robj <- readRDS('%s')",path);
engine.eval(cmd);

// for jsonlite:
engine.eval("library('org.renjin.cran:jsonlite')");
String jcmd = "jobj <- toJSON(robj)";

// for jsonify:
// engine.eval("library('org.renjin.cran:jsonify')");
// String jcmd = "jobj <- to_json(robj)";

engine.eval(jcmd);
                    
StringWriter outputWriter = new StringWriter();
engine.getContext().setWriter(outputWriter);   
String pcmd = "print(jobj)";     
engine.eval(pcmd);
result = outputWriter.toString();

jsonlite错误

org.renjin.eval.EvalException: values must be type 'character',but FUN(list(staple = character(0),res1 = integer(0),res1.delta.mass = numeric(0),res2 = integer(0),res2.delta.mass = numeric(0),info = character(0))[[1L]],collapse = FALSE,complex = complex,na = na,oldna = oldna,rownames = rownames,dataframe = dataframe,indent = indent + 2L,no_dots = no_dots,auto_unBox = auto_unBox,Date = Date,POSIXt = POSIXt,factor = factor,raw = raw,matrix = matrix,digits = digits,null = null,force = force) result is type 'character'
at org.renjin.primitives.Evaluation.vapply(Evaluation.java:181)

jsonify错误

Caused by: java.lang.IllegalStateException: Attempt to modify a shared SEXP
at org.renjin.gnur.api.Rinternals.SET_STRING_ELT(Rinternals.java:716)

有效的R语句:

# jsonlite
toJSON(readRDS('/path/to/file.RDS'))
# jsonify
to_json(readRDS('/path/to/file.RDS'))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)