我有一个较大的RDS文件需要在R中读取。但是,读取文件需要相当长的时间。
有没有一种方法可以加快读取速度?我尝试使用 data.table
库以及它的 fread
函数,但是出现了错误。
data <- readRDS("myData.rds")
data <- fread("myData.rds") # error
我有一个较大的RDS文件需要在R中读取。但是,读取文件需要相当长的时间。
有没有一种方法可以加快读取速度?我尝试使用 data.table
库以及它的 fread
函数,但是出现了错误。
data <- readRDS("myData.rds")
data <- fread("myData.rds") # error
一种加快大文件读取操作的方法是以压缩模式读取
system.time(read.table("bigdata.txt", sep=","))
user: 170.901
system: 1.996
elapsed: 192.137
现在尝试使用压缩文件进行相同的阅读
system.time(read.table("bigdata-compressed.txt.gz", sep=","))
user: 65.511
system: 0.937
elapsed: 66.198
RDS
文件? - Prradep压缩也会影响 rds 文件的读取速度:
n<-1000
m<-matrix(runif(n^2), ncol=n)
default<-tempfile()
unComp<-tempfile()
saveRDS(m,default)
saveRDS(m, unComp,compress = F)
microbenchmark::microbenchmark(readRDS(default), readRDS(unComp))
#> Unit: milliseconds
#> expr min lq mean median uq max neval
#> readRDS(default) 46.37050 49.54836 56.03324 56.19446 59.99967 96.16305 100
#> readRDS(unComp) 11.60771 13.16521 15.54902 14.01063 17.36194 27.35329 100
#> cld
#> b
#> a
file.info(default)$size
#> [1] 5326357
file.info(unComp)$size
#> [1] 8000070
require(qs)
#> Loading required package: qs
#> qs v0.25.1.
qs<-tempfile()
qsave(m, qs)
microbenchmark::microbenchmark(qread(qs), readRDS(unComp))
#> Unit: milliseconds
#> expr min lq mean median uq max neval
#> qread(qs) 10.164793 12.26211 15.31887 14.71873 17.25536 27.08779 100
#> readRDS(unComp) 9.342042 12.59317 15.63974 14.44625 17.93492 35.12563 100
#> cld
#> a
#> a
file.info(qs)$size
#> [1] 4187017
然而,正如在这里所看到的,这是以文件大小为代价的。存储速度可能也会产生影响。在慢速存储(例如网络、旋转磁盘)上,使用压缩实际上可能更好,因为文件可以更快地从磁盘读取。因此,这是值得尝试的。特定的软件包甚至可能提供稍微更好的性能,qs
具有相同的速度但更小的尺寸,结合了两个世界的优点。对于特定的数据格式,其他软件包可能效果更好,请参见此概述:https://books.ropensci.org/drake/plans.html#special-data-formats-for-targets
compress = FALSE
保存文件,这可以明显加快读写速度。 - Andrey Shabalin