我试图使用data.table
包中的fread
函数输入一个大型制表符分隔文件(约2GB)。但是,由于它太大了,无法完全放入内存。我尝试通过使用skip
和nrow
参数分块输入:
chunk.size = 1e6
done = FALSE
chunk = 1
while(!done)
{
temp = fread("myfile.txt",skip=(chunk-1)*chunk.size,nrow=chunk.size-1)
#do something to temp
chunk = chunk + 1
if(nrow(temp)<2) done = TRUE
}
在上述情况下,我每次读入100万行进行计算,然后获取下一个100万行等等。这段代码的问题在于,在检索到每个块之后,fread
需要从文件开头开始扫描,因为在每次循环迭代后,skip
会增加100万行。结果是,在每个块之后,fread
需要花费越来越长的时间才能实际到达下一个块,这使得效率非常低下。有没有一种方法可以告诉
fread
每读取100万行就暂停一次,然后继续从那个点继续读取,而不必重新从开头开始?有解决方案吗,还是应该提出一个新的功能请求?