使用importr

时间:2018-04-11 13:34:21

标签: python r rpy2 r-package

我在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

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

2 个答案:

答案 0 :(得分:1)

您只导入基本模块,需要完全导入它。你会认为Python会自动执行此操作,显然它不会。请参阅this SO answer

from mRMRr import *
from datasets import *

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

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

答案 1 :(得分:0)

我曾经导入一些R包,然后在我的python代码中使用它们,但是最近我改进了一种方法,您可以简单地使用R代码并为其提供所需的任务。在这里https://stackoverflow.com/a/55900840/5350311看看,这对您的情况很有用。