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

R kernel crashes while loading R package using rpy2

首先,我是 rpy2 / jupyter 的新手,所以如果这不是问我问题的正确位置,请不要评判我。

我正在尝试使用 R 和 Python 设置集成的数据分析工作流程,但遇到以下错误:

我在 Ubuntu 19.04。 运行 使用 Jupyter 1.0.0、Python 3.7.4、R 3.5.1、r-irkernel 1.0.2 和 rpy2 3.1.0 的 conda 环境,我通过 R 安装了 R-package Seurat。

当我使用 R 内核创建 Jupyter notebook 时,我可以用 library(Seurat) 加载 Seurat 就好了。

我还可以使用 rpy2 和 rmagic 在 python 中使用 R 代码,例如:

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

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

%%R
library(Seurat)

我收到以下消息:

Kernel Restarting
The kernel appears to have died. It will restart automatically

Jupyter 在命令行中给出以下消息:

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

请注意,library(dplyr) 等其他库使用 rpy2 加载得很好。

我完整的conda环境可以在附件text file.

中找到

我似乎无法弄清楚是什么导致了这个问题。有没有办法从 Jupyter 获取更详细的错误消息?

非常感谢您的帮助!

问候菲利克斯

R 包 Seurat 正在使用另一个名为 reticulate 的 R 包,提供从 R 到 Python 的桥梁。

不幸的是,每当涉及 rpy2reticulate 时,R 最终会被初始化两次,这不可避免地会导致段错误。在撰写本文时,这仍然是一个未解决的错误。 rpy2 端的问题跟踪(可以在此处找到 reticulate 端的 link 跟踪)在这里:

https://bitbucket.org/rpy2/rpy2/issues/456/reticulate-rpy2-sharing-r-process

我和你有同样的问题。但我降级到 Seurat 3.0.2,你的问题将得到解决。要将用户定义的 R 内核用于带有 conda 的 rpy2,运行 最开始之前的代码(在 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.

这对我有用,但在从 rpy2 导入 robjects 时面临内核死机的问题:

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