在Unix shell中增加可用内存到R进程

问题描述:

我在有16 GB RAM的Unix OS上运行R进程。我正在运行一个R会话,其中我正在执行以下操作:在Unix shell中增加可用内存到R进程

我将大小约为350 MB的csv文件导入到数据框中。 然后我对上面创建的数据框执行操作,为每个唯一组选择前n个产品。

但是,当我检查此R会话占用的内存量时,它显示大约90%,然后自动会话被终止。我对UNIX上R的内存管理并不了解。 因为我的系统的操作系统有16 GB RAM,我的R会话最多可能需要700 MB(导入的CSV为350 MB,创建的新数据帧为350 MB),那么它如何使用90系统的%内存并被杀死。在Unix中分配给R进程的内存是否有一些默认限制?如果是的话,是否可以增加。任何人都可以请建议。我经历了许多类似这样的帖子,但找不到任何解决方案。

+1

当你的方法创建例如两两比较的矩阵,这可以很容易地泛滥你的记忆。所以,不知道你的方法是如何工作的,很难知道。我的猜测是,它会创建一个比您预期的矩阵更大的矩阵... – 2013-02-16 13:38:11

+0

@Daniel Fischer:从导入csv创建的我的数据框如下所示: abc 1 2 .1 1 3.45 1 4 .22 3 2.76 3 1.45 .... 然后,我从上面创建另一个数据帧,根据列c的最大值,使用以下内容为列a的每个唯一值选择前2行功能。 d 2013-02-16 14:09:41

+0

当您在较小的示例上测试代码时,它占用了多少内存?你确实尝试过一个小例子,不是吗?因为无法用数百万行和列检查代码的正确性。制作更小的示例,绘制示例大小以防用尽RAM。 – Spacedman 2013-02-16 14:14:22

你没有说出你有什么Unix风格,以及它是32位还是64位。这很重要。

作为第一个测试,尝试分配的内存,你认为你应该有量,例如像

m <- rep(NA, 0.8 * 16 * 1024 * 1024 * 1024/8) 

m <- matrix(NA, 0.8 * 16 * 1024 * 1024 * 1024/8, 1) 

为16 GB,其中每个元素的8个字节,并且我们要求总数的80%不要使系统失效。

然后,一旦你知道你可以得到多少内存,就像Daniel建议的那样去思考你的方法,知道他们会花多少钱。