3

首先,我是 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 笔记本时,我可以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)

我收到以下消息:

内核重新​​启动
内核似乎已经死机。它会自动重启

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 环境可以在附加的文本文件中找到。

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

您的帮助将不胜感激!

问候菲利克斯

4

3 回答 3

3

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

不幸的是,每当涉及到 R 时rpy2reticulate最终都会被初始化两次,这不可避免地会导致段错误。在撰写本文时,这仍然是一个开放的错误。侧面的问题跟踪(可以找到跟踪侧面rpy2的链接)在这里:reticulate

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

于 2019-11-02T15:29:51.703 回答
0

我和你有同样的问题。但是我降级到 Seurat 3.0.2,您的问题将得到解决。要将用户定义的 R 内核用于 rpy2 和 conda,请在最开始时运行之前的代码(在 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.
于 2020-01-06T01:16:15.357 回答
0

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

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
于 2022-01-27T12:45:37.987 回答