【发布时间】:2018-08-09 11:08:44
【问题描述】:
在网上我可以读到我应该使用 data.table 和 fread 来加载我的数据。
但是当我运行基准测试时,我会得到以下结果
Unit: milliseconds
expr min lq mean median uq max neval
test1 1.229782 1.280000 1.382249 1.366277 1.460483 1.580176 10
test3 1.294726 1.355139 1.765871 1.391576 1.542041 4.770357 10
test2 23.115503 23.345451 42.307979 25.492186 57.772522 125.941734 10
代码如下所示。
loadpath <- readRDS("paths.rds")
microbenchmark(
test1 = read.csv(paste0(loadpath,"data.csv"),header=TRUE,sep=";", stringsAsFactors = FALSE,colClasses = "character"),
test2 = data.table::fread(paste0(loadpath,"data.csv"), sep=";"),
test3 = read.csv(paste0(loadpath,"data.csv")),
times = 10
) %>%
print(order = "min")
我知道fread() 应该比read.csv() 快,因为它首先尝试将行作为字符读入内存,然后尝试将它们转换为整数和因子作为数据类型。另一方面,fread() 只是将所有内容读取为字符。
如果这是真的,test2 不应该比test3 快吗?
有人可以解释一下,为什么我不使用 test2 和 test1 实现加速或至少相同的速度? :)
【问题讨论】:
-
fread也有一个colClasses参数,为了公平比较,您应该使用它。 -
变化不大。 test1、test2 和 test3 的中位时间分别为 1.28、27.95 和 1.29
标签: r dataframe data.table fread