对于R CMD javareconf -e是否有更好的解决方案?

时间:2020-05-16 06:43:59

标签: python r rpy2 rjava

我目前正在从事一个项目,该项目旨在通过仅运行已实现的功能和算法为香草使用提供应用程序,并且易于扩展以帮助另一位研究人员“只需在此处插入您的额外代码” “建筑。

我使用的是Electron Python后端,它又使用 rpy2 库与R通信。 问题是我的Python代码需要加载一个R库,使用rJava,而我发现使语法rpackages.importr('rJava')起作用的唯一方法是,在运行Python脚本之前,导出一些R / Java变量(我认为是的)使用命令R CMD javareconf -e,然后在Ubuntu上运行良好。

我也在Windows上简短地测试了该解决方案,但是它没有用。所以我想知道如果有另一种方法我该如何解决。

在Linux场景中,您认为在R CMD命令之前运行npm start(对于整个Electron应用程序)是否可行?对此没有更好的解决方案吗?

我也在考虑使用Docker容器,但我担心这会使其他研究人员将他们的代码插入App变得更加困难(例如,如果需要外部库)。

不使用R CMD javareconf -e的错误是这样的:

...............
  File "/usr/local/lib/python3.7/dist-packages/rpy2/robjects/packages.py", line 483, in importr
    env = _get_namespace(name)
  File "/usr/local/lib/python3.7/dist-packages/rpy2/rinterface_lib/conversion.py", line 40, in _
    cdata = function(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/rpy2/rinterface.py", line 791, in __call__
    raise embedded.RRuntimeError(_rinterface._geterrmessage())
rpy2.rinterface_lib.embedded.RRuntimeError: Error: .onLoad failed in loadNamespace() for 'rJava', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/home/thispc/R/x86_64-pc-linux-gnu-library/3.6/rJava/libs/rJava.so':
  libjvm.so: cannot open shared object file: No such file or directory

我已经尝试过~$sudo R CMD javareconf

2 个答案:

答案 0 :(得分:0)

R似乎安装在非常规位置。可能链接器找不到它。按照以下命令的输出中的建议设置环境变量是否有帮助?

python -m rpy2.situation LD_LIBRARY_PATH

答案 1 :(得分:0)

lang-js R CMD javareconf -e 不能在 Windows 上使用。解决方案也克服了@Colllombelli 提到的错误消息:

rpy2.robjects.packages.LibraryError: The symbol .env in the package "rJava" is conflicting with a Python object attribute

是下面的代码:

rJava = importr('rJava', robject_translations={'.env': '__env'})

归功于 M Sellwood