Rpy2找不到包裹

时间:2015-02-06 14:19:53

标签: python rpy2

我在Windows 7 64上使用Rpy2并且无法加载软件包:

R中的

using(mi)
python中的

from rpy2.robjects.packages import importr
mi=importr('mi')

---------------------------------------------------------------------------
RRuntimeError                             Traceback (most recent call last)
<ipython-input-30-2d393a6df544> in <module>()
----> 1 mi=importr('mi')

C:\Anaconda\lib\site-packages\rpy2\robjects\packages.pyc in importr(name, lib_loc, robject_translations, signature_translation, suppress_messages, on_conflict, data)
    397     if _package_has_namespace(rname, 
    398                               _system_file(package = rname)):
--> 399         env = _get_namespace(rname)
    400         version = _get_namespace_version(rname)[0]
    401         exported_names = set(_get_namespace_exports(rname))

RRuntimeError: Error in loadNamespace(name) : there is no package called 'm

有什么建议吗?

6 个答案:

答案 0 :(得分:4)

我遇到了类似的问题:

rpy2.rinterface.RRuntimeError: Error in loadNamespace(name) : there is no package called speedglm

我注意到问题是rpy2不知道所有R库的位置。在我的例子中,输入(在R中)

.libPaths()

给了我

[1] "/home/nbarjest/R/x86_64-redhat-linux-gnu-library/3.4"
[2] "/usr/lib64/R/library"                                
[3] "/usr/share/R/library" 

然后,输入(在Python 3中)

import rpy2.rinterface
rpy2.rinterface.set_initoptions((b'rpy2', b'--no-save', b'--no-restore', b'--quiet'))
from rpy2.robjects.packages import importr
base = importr('base')
print(base._libPaths())

只给了我

[1] "/home/nbarjest/R/x86_64-redhat-linux-gnu-library/3.4"

我找不到将其他两个路径附加到base._libpath()的方法。如果您找到了办法,请告诉我。我使用了另一种解决方法:

import rpy2
import rpy2.robjects as RObjects
from rpy2.robjects.packages import importr
utils = importr("utils")
d = {'print.me': 'print_dot_me', 'print_me': 'print_uscore_me'}
try:
    thatpackage = importr('speedglm', robject_translations = d, lib_loc = "/home/nbarjest/R/x86_64-redhat-linux-gnu-library/3.4")
except:
    try:
        thatpackage = importr('speedglm', robject_translations = d, lib_loc = "/usr/lib64/R/library")
    except:
        thatpackage = importr('speedglm', robject_translations = d, lib_loc = "/usr/share/R/library")

这很有效。我希望其他有同样问题的人发现这个有用。

答案 1 :(得分:0)

这是在rpy2的问题跟踪器上交叉发布并回答:https://bitbucket.org/rpy2/rpy2/issue/265/windows-error-in-loadnamespace

答案 2 :(得分:0)

对我来说,在 importer 中,其中的参数 lib_loc 起作用,将出现的 first 路径在R中 .libPaths()的输出中,例如:

importr('name package', lib_loc="/home/nbarjest/R/x86_64-redhat-linux-gnu-library/3.4")

其中路径是@Nbarjest答案的输出示例中的路径。

答案 3 :(得分:0)

我也有这个问题,我将需要的包复制到base._libPaths(),在这里,它可以正常工作。

import rpy2.robjects as objects
from rpy2.robjects.packages import importer
base = importr('base')
base._libPaths()[0]

答案 4 :(得分:0)

在python中:检查rpy2使用的R版本

import rpy2.robjects as robjects
robjects.r['version']

检查rpy2库的位置

base = importr('base')
print(base._libPaths())

在R中:检查您的R库位置以获取该版本的r

.libPaths()

将您的r版本中安装的库复制到rpy2使用的文件夹中。

答案 5 :(得分:0)

我遇到了类似的问题。我必须卸载 R 并以管理员权限重新安装它,然后在以管理员权限运行 R 的同时重新安装 R 包,这样它就会安装到标准库位置(不是个人库)。然后在PATH变量中加入R,重新安装rpy2。