R和C堆栈使用中允许的内存

时间:2015-03-16 20:50:29

标签: r memory stack

我试图将大文件(~5GB)读入R并处理数据。我可以成功读取整个5GB文件,但是当我应用我的处理时会出现问题。我对R中的记忆基础知识并不十分了解,我希望你们中的一些人可以帮助我更好地理解。

这是我正在运行的一个例子

file = fread("file.txt") #file.txt is 5GB of unprocessed data
t.str <-strptime(file$time, "%m/%d/%Y %H:%M:%S"")#convert column to date class
month = as.numeric(format(t.str, "%m"))#create vector from file column
high = ifelse(file$age>70,1,0) #create vector from file column
#There are about ten more lines that operate on this file.

fread在文件中读得很好。我在&#39;文件上运行的前三个或四个操作&#39;数据框架工作。但是,在运行了一定数量后,我收到一条错误消息:

C stack usage 19923892 is too close to the limit

我很确定问题不在于我正在运行的某个命令,因为它适用于较小的数据集。我已经读过一些关于堆栈的内容,但这个警告对我来说并不完全合理。这是否意味着R使用指针来运行这些大向量,并且我已经用完了指针空间(?)。我在这里读到了类似的问题:

Error: C stack usage is too close to the limit

一位用户建议增加shell中的堆栈大小。我试图进一步研究这个问题,但我不确定如何继续。以下是他们的建议:

$ ulimit -s # print default
8192
$ R --slave -e 'Cstack_info()["size"]'
size 
8388608

任何人都可以帮我理解这意味着什么,或者只是解释一下R中的堆栈使用情况?或者有没有人知道更好的方法来处理不超过堆栈使用量的数据?我不确定如何为你们提供可重复的数据。

编辑以添加数据示例:

PersonID     time              Energy   Age
1301839    07/24/2013 07:15:00  0.13    68
1301521    07/24/2013 07:30:00  0.19    68
1301890    07/24/2013 07:45:00  0.10    68
1301890    07/24/2013 08:00:00  0.06    68
1307112    07/24/2013 08:15:00  0.01    68

1 个答案:

答案 0 :(得分:2)

抱歉,这不是一个答案,但我没有足够的评论意见。您可以尝试以块的形式读取和处理数据,或者在CRAN任务视图High Performance Computing中查看一些大型内存包。您还可以阅读有关内存使用情况here的信息。