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

Calling functions from within R packages in Python using importr

我在R中使用一个称为mrmre的特性选择算法,但我需要从python调用它。我已经成功地安装了这个包,并且能够从python调用它。我需要访问mrmre包中的一些函数,比如mrmr.data,以便根据algo的需要将数据帧转换为格式。

1
2
3
4
5
6
7
8
9
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时,我得到一个错误:

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

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

1
2
3
4
5
6
7
8
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'

我从这里输入链接描述得到了这个数据集部分

我不知道我做错了什么。我之前从mrfdepth导入了as used r的medc偶函数,如下所示:

1
2
3
4
5
6
7
8
9
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会自动做到这一点,显然不会。看这个答案。

1
2
from mRMRr import *
from datasets import *

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

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


我曾经导入一些R包,并在我的python代码中使用它们,但最近我临时设计了一个方法,您可以在其中简单地使用R代码,并为它提供所需的任务。请访问https://stackoverflow.com/a/55900840/5350311,它对您的案例很有用。