首页 文章

错误:向量内存耗尽(达到限制?)R 3.5.0 macOS

提问于
浏览
12

我已经和包含基因表达数据的大量文件一起工作了一段时间,最近我遇到了在升级到R 3.5.0之后将数据加载到R中的问题 . 使用大约8GB的内存(我的Mac有16GB的RAM)后,如果我尝试读取另一个文件,我会收到以下错误:

Error: vector memory exhausted (limit reached?)

我发现之前的帖子(Error: vector memory exhausted (limit reached?))建议我尝试将环境变量R_MAX_VSIZE设置为更高的值,所以我尝试了以下内容:

Sys.setenv(R_MAX_VSIZE = 16e9)

但是,我仍然有同样的错误 . 我没有正确设置环境变量吗?有什么我想念的吗?

会话信息:

R version 3.5.0 (2018-04-23)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.5

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib

locale:[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages: [1] data.table_1.11.4

loaded via a namespace (and not attached):
[1] compiler_3.5.0 tools_3.5.0

2 回答

  • 4

    R 3.5对内存分配有新的系统限制 . 从发行说明:

    现在可以使用环境变量R_MAX_VSIZE指定最大向量堆大小 . 在macOS上,除非由此环境变量指定,否则最大向量堆大小将设置为最大16GB和可用物理内存 . 这是为了避免在macOS过度提交内存时R进程被终止 .

    你可以覆盖它 . 你冒着过度分配和杀死这个过程的风险,但如果你用R 3.4.4或之前用过的任何东西击中硬墙,那可能就是这样 .

    在终端中执行以下操作以创建临时环境变量 R_MAX_VSIZE ,其值为32GB(更改为适合): export R_MAX_VSIZE=32000000000

    或者,如果您不想打开终端并在每次要启动R会话时运行该终端,则可以将相同的行附加到您的bash配置文件中 . 打开终端并找到您的bash配置文件 open .bash_profile ,然后在文本编辑器中添加上面的行 .

    您仍然需要打开终端并从那里启动R.您可以通过执行 R 在终端中运行R,也可以打开GUI open -n /Applications/R.app .

    要在R会话中进行此更改,请使用 Sys.setenv('R_MAX_VSIZE'=32000000000) 并检查值使用 Sys.getenv('R_MAX_VSIZE')

  • 7

    对于那些使用Rstudio的人,我发现设置 Sys.setenv('R_MAX_VSIZE'=32000000000) 仅适用于命令行,并且在使用Rstudio时设置该参数不会阻止此错误:

    Error: vector memory exhausted (limit reached?)

    在做了一些阅读之后,我找到了this thread,它澄清了Rstudio的问题,并确定了一个解决方案,如下所示:

    第1步:打开终端,

    第2步:

    cd ~
    touch .Renviron
    open .Renviron
    

    第3步:将以下内容保存为 .Renviron 的第一行:

    R_MAX_VSIZE=100Gb
    

    注意:此限制包括物理和虚拟内存;因此,在具有16Gb物理内存的计算机上设置_MAX_VSIZE = 16Gb可能无法阻止此错误 . 您可能必须使用此参数,具体取决于您的机器的规格

相关问题