Rpy2无法找到R.dll

时间:2015-04-25 09:42:27

标签: python r path rpy2

我在使用Python 2.7.9的Windows 7 64位上安装了R-3.2.0(之前也尝试过R-2.12.2和R-3.1.3但得到了相同的结果),添加了C:\Program Files\R\R-3.2.0\bin\i386到系统路径,将R_HOME添加为值为C:\Program Files\R\R-3.2.0的系统变量,将R_USER添加为值“Matt”,并使用安装的.exe文件安装rpy2-2.3.0dev。

但是,键入from rpy2 import robjects会在rpy2 \ rinterface \ __ init__.py中出现以下错误:

Traceback (most recent call last):
  File "C:\Python27\rpy2Test.py", line 2, in <module>
    from rpy2 import robjects
  File "C:\Python27\lib\site-packages\rpy2\robjects\__init__.py", line 14, in <module>
    import rpy2.rinterface as rinterface
  File "C:\Python27\lib\site-packages\rpy2\rinterface\__init__.py", line 79, in <module>
    raise RuntimeError("Unable to locate R.dll within %s" % R_HOME)
RuntimeError: Unable to locate R.dll within C:Program Files\R\R-3.2.0

我试过复制并粘贴它:

if os.path.exists(os.path.join(R_HOME, 'lib')):             ## ADDED ##
    os.environ['PATH'] += ';' + os.path.join(R_HOME, 'bin')    ## ADDED ##
    os.environ['PATH'] += ';' + os.path.join(R_HOME, 'modules')    ## ADDED ##
    os.environ['PATH'] += ';' + os.path.join(R_HOME, 'lib')    ## ADDED ##
else:                                   ## ADDED ##
    os.environ['PATH'] += ';' + os.path.join(R_HOME, 'bin', 'i386')     ## ADDED ##
    os.environ['PATH'] += ';' + os.path.join(R_HOME, 'modules', 'i386') ## ADDED ##
    os.environ['PATH'] += ';' + os.path.join(R_HOME, 'library')     ## ADDED ##

# Load the R dll using the explicit path
# First try the bin dir:
Rlib = os.path.join(R_HOME, 'bin', 'R.dll')
# Try bin/i386 subdirectory seen in R 2.12.0                ## ADDED ##
if not os.path.exists(Rlib):                        ## ADDED ##
    Rlib = os.path.join(R_HOME, 'bin', 'i386', 'R.dll')         ## ADDED ##

进入rinterface \ __ init__.py,但这没有做任何事。

我也尝试将bin \ i386文件夹中的所有内容复制到bin文件夹中,但仍然没有区别。

如何让rpy2找到r.dll?

2 个答案:

答案 0 :(得分:1)

昨晚我做了一个rpy2安装pdf来解决这个问题 - 在PATH中链接的R,Pyhton,pywin32或rpy2很可能不是32位。

也许会有所帮助 - rpy2pandas.pdf

(唯一的问题是我在C中使用Python:/Python27 / ArcGIS10.2 / python.exe,否则其他一切都应该移植。)

答案 1 :(得分:0)

我为这个问题多次苦苦挣扎,发现也许不是那么优雅,但是对于整个问题而言,一个简单的解决方法无法导入rpy2故事。如果您也厌倦了使用env变量,那么只需在一个小的python脚本中进行设置即可,该脚本可以在开始时导入。 首先获取rpy2 .whl软件包,然后根据https://stackoverflow.com/a/32983656/6912069进行安装 然后只需创建一个小的python脚本,然后在依赖rpy2的其他python脚本的开头导入即可。 对我来说,这是可行的:

from __main__import *
import os
os.environ['PYTHONHOME'] = 'C:/Program Files/Python'
os.environ['PYTHONPATH'] = 'C:/Program Files/Python/lib/site-packages'
os.environ['R_HOME'] = 'C:/Program Files/R/R-3.5.1'
os.environ['R_USER'] = 'C:/Program Files/Python/Lib/site-packages/rpy2'

# importing rpy2 now throws no errors
import rpy2.robjects as ro

在我的主要python脚本的开头导入此脚本时,我可以使用rpy2包并从Python内部控制R。