使用rpy2加载R包时R内核崩溃

bbuxkriu  于 2023-05-11  发布在  其他
关注(0)|答案(5)|浏览(381)

首先,我是rpy 2/ jupyter的新手,所以如果这不是问我问题的正确地方,请不要评判我。
我试图使用R和Python设置数据分析的集成工作流程,遇到以下错误:
Ubuntu 19.04运行conda环境,使用Jupyter 1.0.0,Python 3.7.4,R 3.5.1,r-irkernel 1.0.2和rpy 2 3.1.0,我通过R安装了R包Seurat。
当我使用R内核创建Jupyter notebook时,我可以用library(Seurat)加载Seurat。
我也可以在python中使用rpy 2和rmagic来使用R代码,比如:

%load_ext rpy2.ipython
%%R
data(allen, package = 'scRNAseq')
adata_allen <- as(allen, 'SingleCellExperiment')

然而,当我尝试使用rpy 2加载Seurat时,内核崩溃了:

%%R
library(Seurat)

我得到了以下信息:
内核重启
内核似乎已经死亡。它会自动重启
Jupyter在命令行中给出以下消息:

[I 16:39:01.388 NotebookApp] KernelRestarter: restarting kernel (1/5), keep random ports
kernel 23284ec0-63d5-4b61-9ffa-b52d19851eab restarted

请注意,其他库(如library(dplyr))使用rpy 2可以很好地加载。
我完整的conda环境可以在附件text file中找到。
我就是想不出是什么引起了这个问题。有没有一种方法可以从Jupyter获得更详细的错误消息?
您的帮助将不胜感激!
问候菲利克斯

nc1teljy

nc1teljy1#

这是对原始答案的编辑-segfault不应再发生。

R包Seurat使用了另一个R包reticulate,它提供了从R到Python的桥梁。
Python GIL由rpy 2端的cffi发布的问题,以及网状端无法确保获得GIL的问题导致了很长一段时间的segfault。但是,当前(2023)版本的rpy 2和reticulate应该可以一起工作。

ozxc1zmp

ozxc1zmp2#

我也有同样的问题。但我降级到修拉3.0.2,你的问题将得到解决。要在conda中为rpy2使用用户定义的R内核,请在最开始(imoort rpy2之前)运行之前的代码

# user defined R installation
import os
os.environ['R_HOME'] = '/path/to/miniconda/envs/seurat/lib/R' #path to your R installation
os.environ['R_USER'] = '/path/to/miniconda/lib/python3.7/site-packages/rpy2' #path depends on where you installed Python.
uqzxnwby

uqzxnwby3#

这对我来说很有效,同时在从rpy2导入对象时面临内核死亡的问题:

import os
os.environ['R_HOME'] = '/Users/<your user>/anaconda3/envs/<env name>/lib/R'

# import your desired module
from rpy2.robjects.packages import importr
vsnjm48y

vsnjm48y4#

我也遇到了同样的问题,我也在docker中使用R和python以及Jupyter notebook。
我解决了内核崩溃的问题,我的notebook或Python代码如下:

import os \
os.environ['R_HOME'] = '/usr/lib/R'

/usr/lib/R是我的系统的R安装和库的位置,并且应该是rpy 2所需的R版本。希望这能帮上忙。

hi3rlvi2

hi3rlvi25#

我尝试在jupyter/r-notebook:hub-2.3.1 Docker镜像中安装rpy2,该镜像随Python 3.10.5、IPython 8.4.0、R 4.1.3一起提供。
如果我在终端窗口中安装rpy2pip

python3 -m pip install rpy2

我在终端中启动IPython,输入import rpy2,第一步就成功了。但下一步,即:import rpy2.robjects as robjects会导致以下不太有指导意义的错误消息:

Error in glue(.Internal(R.home()), "library", "base", "R", "base", sep = .Platform$file.sep) : 
  4 arguments passed to .Internal(paste) which requires 3
Error: could not find function "attach"
Error: object '.ArgsEnv' not found
Fatal error: unable to initialize the JIT

原因是PyPI上的rpy2包与jupyter/r-notebook镜像中的Python和R安装之间存在一些微妙的不兼容性。发生不兼容的原因是Python和R * 是使用Conda* 在r-notebook映像中安装的。
如果我同时安装rpy2 * 和Conda*,如下所示:

conda install --yes rpy2

那么一切都能像广告上说的那样工作。

经验教训

1.如果Python和R是用OS包安装程序安装的,那么你可以 * 很可能 * 用pip安装rpy2
1.如果Python和R是用Conda安装的,那么也用Conda安装rpy2
1.(最尴尬的一点):有一个jupyter/datascience-notebook,它预装了rpy2(加上很多其他的好东西),不需要安装任何东西:
jupyter/datascience-notebook包含来自Julia、Python和R社区的数据分析库。
jupyter/scipy-notebook和jupyter/r-notebook镜像中的所有内容,以及它们的祖先镜像rpy 2包Julia编译器和基本环境IJulia用于支持Jupyter笔记本HDF 5、Gadfly、RDasets包中的Julia代码

相关问题