将大型数据集加载到 R 中的最快方法和最快格式是什么

What is the fastest way and fastest format for loading large data sets into R

我有一个很大的数据集(大约 13GB 未压缩),我需要反复加载它。第一次加载(并保存为不同的格式)可能非常慢,但此后的每次加载都应尽可能快。加载数据集的最快方式和最快格式是什么?

我怀疑最佳选择是这样的

 saveRDS(obj, file = 'bigdata.Rda', compress = FALSE)
 obj <- loadRDS('bigdata.Rda)

但这似乎比使用 data.table 包中的 fread 函数慢。这不应该是这种情况,因为 fread 从 CSV 转换文件(尽管它被公认是高度优化的)。

~800MB 数据集的一些时间安排是:

> system.time(tmp <- fread("data.csv"))
Read 6135344 rows and 22 (of 22) columns from 0.795 GB file in 00:00:43
     user  system elapsed 
     36.94    0.44   42.71 
 saveRDS(tmp, file = 'tmp.Rda'))
> system.time(tmp <- readRDS('tmp.Rda'))
     user  system elapsed 
     69.96    2.02   84.04

以前的问题

This 问题是相关的,但并不反映 R 的当前状态,例如,答案表明从二进制格式读取总是比文本格式更快。使用 *SQL 的建议对我的情况也没有帮助,因为需要整个数据集,而不仅仅是其中的一个子集。

还有相关问题,最快的一次加载数据的方式(eg:1)。

这取决于您打算如何处理数据。如果您希望内存中的整个数据用于某些操作,那么我想您最好的选择是 fread 或 readRDS(如果这对您很重要,则保存在 RDS 中的数据的文件大小要小得多)。

如果您要对数据进行汇总操作,我发现一次性转换为数据库(使用 sqldf)是一个更好的选择,因为通过执行 [=14,后续操作要快得多=] 查询数据,但这也是因为我没有足够的内存来加载内存中的 13 GB 文件。