我已经建立了一个系统设置,该系统已经从Java servlet中愉快地运行R,产生了处理过的并挂接到进程的stdin,stdout和stderr流中,如第二个 and this question中所示。
系统升级(包括glibc)后,输入不再达到R进程。*
到目前为止,“ R --vanilla --slave -f [file] ...”对我来说还不错。我现在也没有挥杆依赖,所以我有点不愿意添加它们。 (我实际上可能无法添加swing依赖关系;我是对的,使用REngine自动引入了swing?示例导入了所有swing。)
切换到JRI有优势吗?我需要对R脚本进行哪些更改? (它当前从stdin读取并写入stdout)。我发现提供的示例对于这种情况下如何使用JRI并没有很大帮助。
感谢您的帮助和评论。
*我什至无法确定问题是数据写入得太早还是太晚,但这是一个单独的问题。如果我转到JRI,我希望一切都变得毫无意义。
最佳答案
我的两分钱:
我发现与JRI合作非常简单。 JRI提供了几个示例,它们很好地演示了如何使用它。
通常,您不必对脚本进行任何重大更改,因为您可以使用eval()
函数将整个脚本作为表达式简单地传递,然后处理返回值。我看到的主要优点是,您随后将在Java代码中处理R进程,因此您可以适当地例外处理而不必进行任何系统调用。 JRI还提供Java中的某些R数据类型等效项,例如RVector
。