【发布时间】:2019-08-09 11:27:36
【问题描述】:
我有一个人类可读的文件,其中包含 10 亿个双精度数,全部写在一行(10 亿列)中。
文件本身只有8G左右,我正在使用
fread("filename.data", sep=" ", header=FALSE, data.table=TRUE, showProgress=TRUE)
将它们加载到 R 会话中。该脚本将始终被“杀死”,我从showProgress 获得的最多信息是
* 捕获 segfault * 地址 0x7efc7bed2010,导致 'memory not 映射'
我在过去使用相同的方法加载了更大的文件(原始大小),但可能是“矩阵形式”并且列更少。我猜 data.table 需要存储 10 亿个列名,这会消耗大量内存......这是正确的吗?
- 有没有办法将
fread直接插入行向量(而不是在读取后转置)? - 这些数据是否可以挽救,或者我需要将其重写为行向量吗?
【问题讨论】:
-
平台?在 Linux 上,将由空格分隔的数字行转换为一列是相当简单的
-
?fread中的任何内容都没有建议将单行读取为单列的方法。但正如 Severin 所建议的那样,使用 shell 命令将其重写为行向量应该很容易。 Here's a way to do it for Linux or OSX 或 here's a way with Powershell (Windows)。 -
该死的..我打算这样做,但认为它会同样昂贵。我试试看,谢谢是的,在 Linux 上。
-
不确定你的意思是什么“成本”——内存、时间或其他东西——但无论哪种方式都会非常便宜。
-
确实如此。只有几秒钟。
标签: r data.table fread