Windows中R内存管理的问题。我可以在循环中重启r吗?

时间:2017-01-22 13:58:48

标签: r session memory

我遇到了似乎是一个基本的R问题(bug?)。

问题是我正在参与R包开发,并且有一个相当复杂的功能。当我运行这个函数时,它在内存中留下了很多垃圾,只有gc()部分清除了它。因此,当我想在循环中运行此函数时,发生的事情是在第2到第3次迭代中,R消耗12-16gb并由于内存不足而停止工作。

此问题是特定于Windows的,因为我的协作者无法在LINUX下重现它。因此我的问题是:我可以在循环中执行R重启。

我知道这将删除所有变量,但这就是我需要的。

E.g。一个好的解决方案是编写一个调用R会话的脚本,执行该函数然后关闭R会话。

1 个答案:

答案 0 :(得分:1)

你的问题是重复的,可能会很快被标记,但在此之前,这可能是你最好的选择( from another question that is nearly identical to yours ):

尝试将其中一行放入.Rprofile文件中:

makeActiveBinding("refresh", function() { shell("Rgui"); q("no") }, .GlobalEnv)

makeActiveBinding("refresh", function() { system("R"); q("no") }, .GlobalEnv)

然后在R控制台中输入refresh。它将关闭当前会话并启动一个新会话。

[Source]

这里有一些尝试:

从R:.rs.restartR()内重新启动R,但是,这可能无法清除未使用的文件。您可能需要使用source()gc()

您可能需要从命令行运行它

Here's a post asking the same questionand anotherHere's a great article about memory management in R

在询问之前总是谷歌。所有这一切都很快就找到了。