29

我一直在处理一些包含基因表达数据的大文件,最近在升级到 R 3.5.0 后,我遇到了将这些数据加载到 R 中的问题。使用大约 8GB 内存(我的 mac 有 16GB RAM)后,如果我尝试读取另一个文件,我会收到以下错误:

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   
4

3 回答 3

25

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

Error: vector memory exhausted (limit reached?)

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

第一步:打开终端,

第2步:

cd ~
touch .Renviron
open .Renviron

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

R_MAX_VSIZE=100Gb 

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

于 2018-10-02T16:46:22.230 回答
13

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')

于 2018-08-21T20:21:01.347 回答
10

对于那些可能不熟悉命令行的人,可以在这里找到解决方案:

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

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

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

打开后,R_MAX_VSIZE可以设置 var。

链接页面还链接到该博客,该博客详细描述了 R 的启动过程。

于 2019-04-27T16:33:51.457 回答