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

Allowed Memory in R and C Stack Usage

我正在尝试将大文件 (~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 可以很好地读取文件。我 运行 在 'file' 数据框架上工作的前三个或四个操作。但是,在一定数量的 运行 之后,我收到一条错误消息:

C stack usage 19923892 is too close to the limit

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

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

抱歉,这确实不是答案,但我没有足够的分数来发表评论。您可以尝试分块读取和处理数据,或者查看 CRAN 任务视图中的一些大内存包 High Performance Computing . You can also read about memory usage here