对大列向量使用 `fread()` 的内存要求

Memory requirement using `fread()` for large column vector

我有一个人类可读的文件,其中包含 10 亿个双打,全部写在一行(10 亿列)中。

文件本身只有8G左右,我用的是

fread("filename.data", sep=" ", header=FALSE, data.table=TRUE, showProgress=TRUE)

将它们加载到 R 会话中。该脚本将始终是 "Killed",我从 showProgress 获得的最多信息是

* caught segfault * address 0x7efc7bed2010, cause 'memory not mapped'

我过去使用相同的方法加载了更大的文件(原始大小),但可能在 "matrix form" 中并且列数更少。我猜 data.table 需要存储 10 亿个列名,这会占用大量内存……这是正确的吗?

  1. 有没有办法 fread 直接进入行向量(而不是读取后转置)?
  2. 此数据是否可以挽救,或者我是否需要将其重写为行向量?

将单行读作单列?

给你..

library(data.table)

#read using default separators
fread('v1,v2,v2,v3
this, is, a, test
of, fread,one,line')

#      v1    v2  v2   v3
# 1: this    is   a test
# 2:   of fread one line

#read one column per line/row
fread('v1,v2,v2,v3
this, is, a, test
      of, fread,one,line', sep = "", header = FALSE)

#                    V1
# 1:        v1,v2,v2,v3
# 2:  this, is, a, test
# 3: of, fread,one,line