使用 importr 从 Python 中的 R 包中调用函数

Calling functions from within R packages in Python using importr

我在 R 中使用名为 mRMRe 的特征选择算法,但我需要从 Python 调用它。我已成功安装该软件包并能够从 Python 调用它。我需要访问 R mRMRe 包中的一些函数,例如 mRMR.data 以将数据帧转换为算法所需的格式。

from rpy2.robjects.packages import importr
utils = importr('utils') #-- Only once.
utils.install_packages('mRMRe')

# Now we begin by loading in the R packages
pymRMR = importr('mRMRe')

pymRMR
Out[53]: rpy2.robjects.packages.Package as a <module 'mRMRe'>

然而,当我尝试调用它的函数时 mRMR.data 我得到一个错误:

AttributeError: module 'mRMRe' has no attribute 'mRMR'

如果我尝试使用不同的库,情况也是如此:

datasets = importr('datasets')
datasets.data.fetch('mtcars')
Traceback (most recent call last):

  File "<ipython-input-56-b036c6da58e1>", line 2, in <module>
    datasets.data.fetch('mtcars')

AttributeError: module 'datasets' has no attribute 'data'

我从 enter link description here

得到了这个数据集部分

我不确定我做错了什么。我之前从 mrfDepth 导入了 R 的 medcouple 函数,如下所示:

import rpy2.robjects as ro
#now import the importr() method
from rpy2.robjects.packages import importr
utils = importr('utils') #-- Only once.
utils.install_packages('mrfDepth')
# Now we begin by loading in the R packages
mrfdepth = importr('mrfDepth')
mc = mrfdepth.medcouple(yr)[0]
return mc

有人可以帮我解决这个问题吗?

您只是导入了基本模块,并且需要将其完全导入。您会认为 Python 会自动执行此操作,显然它不会。参见

from mRMRr import *
from datasets import *

编辑:啊,是的,适用于显式 python 模块。我认为调用 sub-packages 函数的语法可能不同。试试这个。

import rpy2.robjects.packages as packages
datasets = packages.importr('datasets')
mtcars = packages.data(datasets).fetch('mtcars')['mtcars']

我过去常常导入一些 R 包并在我的 python 代码中使用它们,但最近我即兴创作了一种方法,您可以简单地使用 R 代码并为其提供所需的任务。看看这里 它可能对你的情况有用。