R中6种读入表格数据的方式哪个最快?结果出人意料!
R怎么讀入表格數據最快?
R中有6個常用數據讀取函數:
utils::read.csv: 默認使用的讀入方式 (read.table)
readr::read_csv: readr包中的讀入函數 (RStudio中默認也包含了這一方式)
data.table::fread: 來自data.table包
base::load: 加載rda文件
base::readRDS: 讀取二進制數據
feather::read_feather: 一種新的feather格式的二進制數據
生成測試數據
set.seed(123) df <- data.frame(replicate(10, sample(0:2000, 15 * 10^5, rep = TRUE)),replicate(10, stringi::stri_rand_strings(1000, 5))) dim(df)[1] 1500000 20把數據存儲為csv格式,feather格式, RDS格式和Rdata格式。
path_csv <- 'df.csv' path_feather <- 'df.feather' path_rdata <- 'df.RData' path_rds <- 'df.rds' library(feather) library(data.table) write.csv(df, file = path_csv, row.names = F) write_feather(df, path_feather) save(df, file = path_rdata) saveRDS(df, path_rds)計算下各個文件的大小;
RDS和RData占的空間最小,不到30M
feather文件占的空間最大,185M
CSV文件占了179M,與feather相差不大
評估速度
采用microbenchmark包比較使用不同函數讀取所需時間。
基于一臺破筆記本的速度評估
library(microbenchmark) benchmark <- microbenchmark(readCSV = utils::read.csv(path_csv),readrCSV = readr::read_csv(path_csv, progress = F),fread = data.table::fread(path_csv, showProgress = F),loadRdata = base::load(path_rdata),readRds = base::readRDS(path_rds),readFeather = feather::read_feather(path_feather), times = 10) # save(benchmark, file = "benchmark.rda")速度最快的是feather::read_feather,但需要預先把數據存儲為feather格式。
其次是fread,但差別不明顯。
load和readRDS沒有表現出速度優勢,但卻需要對文件進行格式轉。
fread函數讀取csv的速度最快;
readr::read_csv函數次之;
默認使用的read.csv速度最慢。
基于一臺SSD硬盤的工作站速度評估
library(microbenchmark) benchmark2 <- microbenchmark(readCSV = utils::read.csv(path_csv),readrCSV = readr::read_csv(path_csv, progress = F),fread = data.table::fread(path_csv, showProgress = F),loadRdata = base::load(path_rdata),readRds = base::readRDS(path_rds),readFeather = feather::read_feather(path_feather), times = 10) save(benchmark2, file = "benchmark2.rda")速度最快的是readr::read_csv,其次是feather::read_feather,然后是fread。
默認使用的read.csv速度最慢。
原始文章的測試結果中,
速度最快的是feather,但需要預先把數據存儲為feather格式。
數據庫保存為feather格式是很快的,適用于需要讀取某個大文件或程序運行中計算出的結果時。
load和readRDS速度稍次,但也需要對文件進行格式轉換,優點是存儲的文件較小。
fread函數讀取csv的速度最快;
readr::read_csv函數次之;
默認使用的read.csv速度最慢。
測試結論
最常用的read.table在每個測試中都是表現最差的。
`readr::read_csv` (處理不同編碼更合適,R中讀取包含中文字符的文件時這個詭異的錯誤你見過嗎?
不同電腦測試結果差別大(可能是軟件版本的問題,也可能是硬件特征問題)。別人用著快的你不一定用著快,多嘗試。
參考
https://appsilon.com/fast-data-loading-from-files-to-r/
往期精品(點擊圖片直達文字對應教程)
機器學習
后臺回復“生信寶典福利第一波”或點擊閱讀原文獲取教程合集
總結
以上是生活随笔為你收集整理的R中6种读入表格数据的方式哪个最快?结果出人意料!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 7 Ubuntu 14
- 下一篇: GPU 编程入门到精通(一)之 CUDA