我在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
有什么建议吗?
答案 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。