错误:向量内存已耗尽(是否达到极限?)R 3.5.0 macOS

时间:2018-07-09 14:47:05

标签: r macos memory

我使用包含基因表达数据的大量大文件已经有一段时间了,最​​近在升级到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   

3 个答案:

答案 0 :(得分:9)

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

  

环境变量R_MAX_VSIZE现在可以用于指定          最大向量堆大小。在macOS上,除非本说明未指定          环境变量,最大向量堆大小设置为          最大16GB和可用的物理内存。这是为了          避免在macOS过量使用内存时杀死R进程。

您可以覆盖它。您可能冒着整体杀害该进程的风险,但是如果您用R 3.4.4或以前使用的任何方法碰壁,那可能就是这种情况。

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

或者,如果您不想每次打开R会话都想打开Terminal并运行它,则可以将同一行附加到bash配置文件中。打开终端,找到您的bash个人资料open .bash_profile,然后在文本编辑器中从上方添加一行。

您仍然必须打开Terminal并从此处启动R。您可以通过执行R在终端中运行R,也可以打开GUI open -n /Applications/R.app

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

检查值

答案 1 :(得分:8)

对于使用Rstudio的用户,我发现设置Sys.setenv('R_MAX_VSIZE'=32000000000)仅在命令行上有效,并且在使用Rstudio时设置该参数不能防止此错误:

Error: vector memory exhausted (limit reached?)

更多阅读后,我发现了this线程,该线程阐明了Rstudio的问题,并确定了解决方案,如下所示:

第1步:打开终端,

第2步:

cd ~
touch .Renviron
open .Renviron

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

R_MAX_VSIZE=100Gb 

注意:此限制包括物理内存和虚拟内存。因此,在具有16Gb物理内存的计算机上设置_MAX_VSIZE = 16Gb可能不会防止此错误。您可能需要使用此参数,具体取决于计算机的规格

答案 2 :(得分:2)

可以为here找到针对那些可能不熟悉命令行的人的解决方案:

简而言之,解决方案是使用usethis包。

usethis::edit_r_environ()将打开您的主目录中的.Renviron。该.Renviron影响所有Rstudio的工作

usethis::edit_r_environ("project")将在您的项目中打开一个.Renviron。对该文件所做的更改只会影响该特定Rstudio项目中完成的工作。

一旦打开,就可以设置R_MAX_VSIZE变量。

链接的页面还链接到this blog,它详细描述了R的启动过程。