我正在尝试将 rpy2 库导入 Jupyter Notebook,但我无法克服此错误。
已添加路径“C:\Program Files\R\R-4.0.2 in\x64”。
这是我的计算机上安装的唯一 R 版本。我已经完全卸载并重新安装了 R/Rstudio/Anaconda,但没有成功。
这是完整的错误:
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-7-098f0d39b3a3> in <module>
----> 1 from rpy2.robjects import pandas2ri
C:\Anaconda\lib\site-packages\rpy2\robjects\__init__.py in <module>
14 from functools import partial
15 import types
---> 16 import rpy2.rinterface as rinterface
17 import rpy2.rlike.container as rlc
18
C:\Anaconda\lib\site-packages\rpy2\rinterface.py in <module>
4 import typing
5 from typing import Union
----> 6 from rpy2.rinterface_lib import openrlib
7 import rpy2.rinterface_lib._rinterface_capi as _rinterface
8 import rpy2.rinterface_lib.embedded as embedded
C:\Anaconda\lib\site-packages\rpy2\rinterface_lib\openrlib.py in <module>
42 rlib = _rinterface_cffi.lib
43 else:
---> 44 rlib = _dlopen_rlib(R_HOME)
45
46
C:\Anaconda\lib\site-packages\rpy2\rinterface_lib\openrlib.py in _dlopen_rlib(r_home)
35 raise ValueError('The library path cannot be None.')
36 else:
---> 37 rlib = ffi.dlopen(lib_path)
38 return rlib
39
OSError: cannot load library 'C:\Program Files\R\R-4.0.2\bin\x64\R.dll': error 0x7e
编辑:
这是我运行的导入 rpy2 库的代码:
from rpy2.robjects import r, pandas2ri
这是我的工作解决方案:
import os
os.environ["R_HOME"] = r"D:\Install\R\R-3.6.1"
os.environ["PATH"] = r"D:\Install\R\R-3.6.1\bin\x64" + ";" + os.environ["PATH"]
import rpy2
from rpy2.robjects import pandas2ri, packages
pandas2ri.activate()
stats = packages.importr('stats')
对于那些不使用Anaconda的人,请在Windows的环境变量PATH中添加以下内容:
C:\Program Files\R\R-4.0.3\bin\x64
您的 R 版本可能与“R-4.0.3”不同
否则,请查看 Grayson Felt 的回复:
添加路径
C:\Users\用户名\Anaconda2;C:\Users\用户名\Anaconda2\Scripts;C:\Users\用户名\Anaconda2\Library;C:\Users\用户名\Anaconda2\Library\mingw-w64\lib ;C:\Users\用户名\Anaconda2\Library\mingw-w64
随后重新启动 Anaconda 解决了该问题。
或者,遵循布鲁诺的建议(并且更加复杂):
try:
import rpy2.robjects as robjects
except OSError as e:
try:
import os
import platform
if ('Windows', 'Microsoft') in platform.system():
os.environ["R_HOME"] = 'C:/Program Files/R/R-4.0.3/bin/x64' # Your R version here 'R-4.0.3'
os.environ["PATH"] = "C:/Program Files/R/R-4.0.3/bin/x64" + ";" + os.environ["PATH"]
import rpy2.robjects as robjects
except OSError:
raise(e)
此代码对非Windows平台无效。 对于不同的 R 版本也可能需要进行调整。 如果事情变得比这更复杂,您可能应该选择解决方案 1 或 2。
注意:如果您的 Python 和 R 版本处于不同的架构(x86 与 x64)中,您也可能会遇到此问题
在导入 r 包之前将其导入顶部。
import os
os.environ["R_HOME"] = r"C:\\Program Files\\R\\R-4.2.1"
os.environ["PATH"] = r"C:\\Program Files\\R\\R-4.2.1\\bin\\x64" + ";" +
os.environ["R_HOME"]
try:
import rpy2.robjects as robjects
except OSError as e:
try:
import os
import platform
if 'Windows' in platform.system():
os.environ["R_HOME"] = 'C:/Program Files/R/R-4.2.1'
os.environ["PATH"] = "C:/Program Files/R/R-4.2.1/bin/x64;" + os.environ["PATH"]
import rpy2.robjects as robjects
except OSError:
raise e
从 Python 3.8 开始,出于安全原因,设置 PATH 不再对解析 DLL 产生影响。相反,在加载之前显式包含 DLL 路径
rpy2
:
import os
os.add_dll_directory(r"path_to_R/bin/x64/") # E.g., "C:/Program Files/R/R-4.3.1/bin/x64"
from rpy2.robjects.packages import importr
这个答案有更多细节。