fread()
和 fwrite()
是 R 中 data.table
包的一部分,它们的执行速度明显快于基础 read.csv()
和 write.csv()
函数。
当我处理巨大的 csv 文件(大小为几 GB)时,我现在发现自己总是在基本函数上使用 fread()
和 fwrite()
read.csv()
和 write.csv()
因为它们的执行速度明显更快。
我现在开始怀疑 read.csv()
和 write.csv()
是否有任何正当理由(而不是单纯的意见)表现更好比 fread()
和 fwrite()
。
有没有这样的原因?
utils
包中的基本读取函数可以做到而 fread
不能做到的一件事是从任何类型的文本连接读取数据。
例如,假设有一个名为 sample.zip
的存档,并且在这个存档中有一个名为 sample.csv
的文件,其中包含以下行:
A,B
1,x
2,y
read.csv
无需解压即可读取该文件:
zipcon <- unz("sample.zip", "sample.csv")
base_result <- read.csv(zipcon)
base_result
# A B
# 1 1 x
# 2 2 y
fread
不能:
library(data.table)
zipcon <- unz("sample.zip", "sample.csv")
dt_result <- fread(zipcon)
# Error in fread(zipcon) :
# 'input' must be a single character string containing a file name, a command,
# full path to a file, a URL starting 'http[s]://', 'ftp[s]://' or 'file://',
# or the input data itself