读入R的文件格式中,哪些格式速度最快?

8

似乎最直观的想法是.rdata文件可能是R加载速度最快的文件格式,但是在查阅一些堆栈帖子时,似乎更多的关注点是提高.csv或其他格式的加载时间。是否有明确的答案?


这是一个非常难以正确回答的问题。例如,您需要考虑将任何给定的文件读取函数转换为编译和优化的C或Fortran代码。此外,除非您首先在R中生成了文件,否则通常没有输入格式选择,因此我不确定答案真正重要! - Carl Witthoft
1个回答

8

以下并非确定性答案,但下面是使用utils::read.delim()readr::read_tsv()data.table::fread()读取相同的数据框作为.tab文件和二进制.RData文件所需的时间,使用system.time()函数计时:

utils::read.delim()读取.tab文件

system.time(
  read.delim("file.tab")
)
#   user  system elapsed 
# 52.279   0.146  52.465

.tab with readr::read_tsv

system.time(
  read_tsv("file.tab")
)    
#   user  system elapsed 
# 23.417   0.839  24.275

.tabdata.table::fread

根据@Roman的要求,同样大小为约500MB的文件在3秒内加载完成:

system.time(
  data.table::fread("file.tab")
)
# Read 49739 rows and 3005 (of 3005) columns from 0.400 GB file in 00:00:04
#    user  system elapsed 
#   3.078   0.092   3.172 

.RData二进制文件包含相同数据框的内容

system.time(
  load("file.RData")
)
#    user  system elapsed 
#   2.181   0.028   2.210

显然不是最终结论(样本量=1!),但以我的500MB数据框为例:

  1. 二进制的.RData文件是最快的
  2. data.frame::fread()排名第二
  3. readr::read_tsv慢一个数量级
  4. utils::read.x最慢,只有readr的一半速度

1
我想知道fread会如何处理这个?愿意试一试吗? - Roman Luštrik
@Phil 我非常确定指定 colClasses 会提高读取 tsv 文件的速度。包含这个比较可能是值得的。 - nrussell
1
但是R生成每种文件类型需要多长时间呢?正如我在前面提到的,当其他人以特定格式发送文件时,这种比较就没有意义了。 - Carl Witthoft
感谢分析。之间有相当明显的差异。 - James Reinhardt - NOAA Affilia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接