【发布时间】:2019-08-29 15:26:08
【问题描述】:
我主要使用 python 编程(使用 jupyter notebooks),但有时需要使用 R 函数。我目前通过使用 rpy2 和 R 魔法来做到这一点,效果很好。现在我想编写一个函数,它将我的分析过程的一部分总结到一个包装函数中(所以我并不总是需要运行所有的代码单元,而是可以简单地执行一次函数)。作为此过程的一部分,我需要调用 R 函数。我修改了我的代码,使用带有 importr 的 rpy2.robjects 接口将 R 函数导入 python。这可行,但速度极慢(对于已经很长的过程来说,运行时间是三倍以上),这使得这在分析方面根本不可行。我假设这与我通过 rpy2 的高级接口而不是低级接口访问 R 有关。我不确定如何在函数调用中使用低级接口,并且需要一些帮助来调整我的代码。
我尝试查看 rpy2 文档,但很难理解它。
这是我在 python 中使用 R 魔法执行 R 函数调用的代码。
激活 rpy2 R 魔法
%load_ext rpy2.ipython
加载我需要的库
%%R
library(scran)
实际调用R函数
%%R -i data_mat -i input_groups -o size_factors
size_factors = computeSumFactors(data_mat, clusters=input_groups, min.mean=0.1)
这是我使用 rpy2 importr 导入 R 函数的替代代码。
from rpy2.robjects.packages import importr
scran = importr('scran')
computeSumFactors = scran.computeSumFactors
size_factors = computeSumFactors(data_mat, clusters=input_groups, min_mean=0.1)
由于某种原因,第二种方法要慢几个数量级。 任何帮助将不胜感激。
【问题讨论】:
-
我遇到了同样的问题,导入语句很慢。奇怪的是,当我在 Python 控制台中运行 importr 语句时,它比使用 python 脚本运行时要快。