300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > r语言读取excel数据_R语言 | 更快的表格文件读取方法!

r语言读取excel数据_R语言 | 更快的表格文件读取方法!

时间:2022-04-30 16:39:28

相关推荐

r语言读取excel数据_R语言 | 更快的表格文件读取方法!

友情提示:蓝色下划线字体为引文,请保持警惕!

使用R语言读取Affymetrix Human Exon 1.0 ST Array芯片平台探针注释文件:

/analysis/downloads/na36/wtexon/HuEx-1_0-st-v2.na36.hg19.probeset.csv.zip

解压后的.csv文件有950MB+,部分内容如下:

其中,前22行为"#"开头的注释行,所以可以不读入。本文将以该文件为例,介绍三种读取方法,并测评读取速度上的优劣!

1、utils包中的read.csv函数,打开R即可直接使用,所以不需要另外安装加载R包:

data = read.csv("HuEx-1_0-st-v2.na36.hg19.probeset.csv", header = T, comment.char = "#")

2、data.table包中的fread函数,需要安装加载data.table包,由于没有read.csv函数中类似 comment.char = "#"的参数设置,故需要通过skip跳过一定数量的行:

p_load(data.table)

data = as.data.frame(fread("HuEx-1_0-st-v2.na36.hg19.probeset.csv", skip = 22, header = T, sep = ",", fill = T))

该函数有个明显的缺点,就是本例中"#"的行,无法很方便的通过其他参数识别并丢弃,参考:

/Rdatatable/data.table/issues/856

Even though fread(cmd='grep -v "#" table.csv') works fine in general, it's not cross platform compatible and makes your code a bit harder to read.

3、readr包中的read_csv函数,需要安装加载readr包,这个包在我们的历史文章中数次出现,包括在GEOquery包中的重要作用将数据高效输出到文件中、以及将数据追加输出到表格文件。与前两种函数的区别在于参数名,col_names = T等同于header = T,如下:

p_load(readr)

data = as.data.frame(read_csv("HuEx-1_0-st-v2.na36.hg19.probeset.csv", comment = "#", col_names = T))

4、比较。三种函数都可以读取.csv格式文件,但read.csv函数在读取大文件时过于缓慢,我们使用microbenchmark包测试多次执行的情况下,三种函数读取本例文件的用时(system.time函数只能计算单次,所以结果会不稳健,可能存在一定的偏倚):

microbenchmarkis based on repeated iterations.system.timeis the time for a single run Here we’ll need to usemicrobenchmark()instead ofsystem.time()in order to get enough accuracy to see a difference

p_load(microbenchmark)

datafile = "HuEx-1_0-st-v2.na36.hg19.probeset.csv"

benchmark = microbenchmark(

read.csv = read.csv(datafile, header = T, comment.char = "#", stringsAsFactors = F),

fread = as.data.frame(fread(datafile, skip = 22, header = T, sep = ",", fill = T)), # nThread=getDTthreads(),即使用所有能用的核心

read_csv = as.data.frame(read_csv(datafile, comment = "#", col_names = T)), times = 10) # 10次执行

print(benchmark, signif = 2)

结果如下:

测试了10次执行,fread的速度是最快的,读取950Mb+的.csv文件平均只需要5.1秒,read_csv需要11秒,而read.csv函数则需要36秒,故在执行速度上的顺序是 fread > read_csv > read.csv。

fread的高效性来源之一是支持多线程:

参数nThread: The number of threads to use. Experiment to see what works best for your data on your hardware.

对统计结果做个可视化:

ggplot2::autoplot(benchmark)

小提琴图的横坐标为时间,数据分布在左侧表示用该方法用时短,右侧表示读取用时较长。

综上:对于较大的.csv文件的读取,推荐使用freadread_csv函数!

而对于.xlsx或.xls文件,推荐使用readxl包中的read_excel函数进行读取

友情提示:本文涉及的R包安装详见下示!

R包相关·往期精彩

R语言 | 如果你再问我怎么安装R包

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。