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

标签 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 在读取文件方面做得很好。我在"file"数据框架上运行的前三四个操作。但是,在运行一定数量后,我收到一条错误消息:
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

最佳答案

对不起,这真的不是一个答案,但我没有足够的观点来评论。您可以尝试分块读取和处理数据,或者查看 CRAN 任务 View 中的一些大内存包High Performance Computing .您还可以阅读有关内存使用的信息 here .

关于r - R 和 C 堆栈使用中允许的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29086680/

相关文章:

r - 使用 ggplot2 在同一个图上将两个变量绘制为线

c - Windows下运行的C二进制文件中的已初始化数据段

r - 将 Z 值矩阵转换为 R 中的颜色

r - 如何在 R Shiny 中显示来自 plotly_click 的许多点?

r - 三个数据表合并行为不一致

java - Java 程序如何跟踪其运行期间使用的最大实际堆大小?

c - 程序的数据部分是否太大?

检查括号平衡的C程序

c++ - "Stack overflow"错误。可能指针不在列表中

linux - 有没有办法将堆栈上的 `n` 数量的元素克隆到 x86_64 linux 程序集中的堆栈?