直到最近,我一直在使用 rpy2 将 R 包加载到运行 Python 内核的 Jupyter 笔记本中,并使用它从 sqlserver 数据库读取一些数据。几天前,我开始看到这个错误:
import rpy2.robjects as ro
R[write to console]: Error: cons memory exhausted (limit reached?)
出现此错误后,Python 内核崩溃并由 Jupyter 重新启动。我想了解这个错误,是什么原因导致的,以及为什么当相同的代码运行之前没有错误时会出现它。
r-devel 上的这个答案表明这是由于超过对象最大数量而产生的 R 错误:
除此之外,关于此错误的可用信息似乎很少。
错误发生在我的代码的第一行。这以及代码之前运行的事实让我认为某些内容是从之前的会话中缓存的。我可以在 R 中导入数据(使用 RStudio),所以我认为这是特定于 Jupyter/rpy2 而不是一般的 R 问题。不过,它并不是特定于这个特定的笔记本的 - 如果我在另一个笔记本上的不同内核上运行上面的
import
,我会得到相同的错误。所以我的问题是:
我在远程 Amazon 工作区的 Windows 10 上的 conda venv 中使用 jupyterlab。我没有管理员权限。以下是一些版本:
import session_info
session_info.show()
-----
rpy2 3.4.4
session_info 1.0.0
-----
Click to view modules imported as dependencies
-----
IPython 7.16.1
jupyter_client 6.1.6
jupyter_core 4.6.3
jupyterlab 2.1.5
notebook 6.0.3
-----
Python 3.7.7 (default, May 6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)]
Windows-10-10.0.14393-SP0
-----
搜索SO揭示了导入robjects可能失败的多种方式,但我只能找到一个关于此特定错误的方法(没有给出答案):
从切面来看,这个问题似乎是密切相关的:
在anaconda python中手动删除pkgs文件夹中的所有文件是否安全?
是否建议定期清理
$HOME\AppData\Local\conda\conda\pkgs\cache
? (更新:此缓存文件夹中有一些相当大的文件,但清除它们并不能解决问题)。
更新:我在 Spyder 中看到同样的错误,在 venv 之外运行,所以这不是 jupyter 特有的。
更新:我可以导入rpy2。简单的
import rpy2
不会产生错误。
更新:
import rpy2.situation as rps
for row in rps.iter_info():
print(row)
给出:
rpy2 version:
3.4.4
Python version:
3.7.7 (default, May 6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)]
Looking for R's HOME:
Environment variable R_HOME: None
InstallPath in the registry: C:\Program Files\R\R-3.6.1
Environment variable R_USER: None
Environment variable R_LIBS_USER: None
R version:
In the PATH:
Loading R library from rpy2: OK
Additional directories to load R packages from:
None
C extension compilation:
Warning: Unable to get R compilation flags.
rpy2中没有设置环境变量。这是否意味着
R_NSIZE
未设置,这是否会导致错误?
我通过添加系统环境变量修复了这个问题:R_HOME、R_USER 和 Path。 [windows10、R 4.1.0、rpy2 3.4.5、python 3.8]
对我来说,这个问题是由位于
.Rprofile
(在 Windows 11 上)的 %USERPROFILE%\Documents\.Rprofile
文件(R 的启动文件)引起的,其中包含以下 R 代码:
if (interactive()) {
require(conflicted)
}
R 解释器的初始化(通过 rpy2 完成)无法处理加载
conflicted
库。要了解我为什么创建这个 .Rprofile
,请查看这篇 tidyverse 博客文章:https://www.tidyverse.org/blog/2018/06/conflicted/
注释掉
.Rprofile
中的这三行修复了我的 import rpy2.robjects
崩溃。
我有和你完全相同的问题,我确实找到了解决方法,但对我来说并不完全令人满意。我仍然会在这里分享它,以防万一它可以帮助其他浏览此内容的人,或者它可以帮助专家确定
import rpy2.robjects as ro
出了什么问题。
我都
renv
参与这个项目。我的.Rprofile
只有一行:
source("renv/activate.R")
我注意到,如果删除此行(或 .Rprofile 文件),我现在可以导入
rpy2.robjects
。但是,通过这样做,我无法再导入我的 renv 中的 R 包。
简而言之,如果您也在使用 renv,请尝试在没有它的情况下工作。