R语言基因组数据分析可能会用到的data.table函数整理
R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快。包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部处理的步骤进行了程序上的优化,使用多线程,甚至很多函数是使用C写的,大大加快数据运行速度。因此,在对大数据处理上,使用data.table无疑具有极高的效率。这里主要介绍在基因组数据分析中可能会用到的函数。
fread
做基因组数据分析时,常常需要读入处理大文件,这个时候我们就可以舍弃read.table,read.csv等,使用读入速度快的fread函数
fread(input,
sep="auto", sep2="auto", nrows=-1L, header="auto", na.strings="NA",
file,
stringsAsFactors=FALSE, verbose=getOption("datatable.verbose"),
autostart=1L,
skip=0L, select=NULL, drop=NULL, colClasses=NULL,
integer64=getOption("datatable.integer64"),# default:
"integer64"
dec=if (sep!=".") "." else ",", col.names,
check.names=FALSE, encoding="unknown", quote="\"",
strip.white=TRUE, fill=FALSE, blank.lines.skip=FALSE,
key=NULL,
showProgress=getOption("datatable.showProgress"), # default:
TRUE
data.table=getOption("datatable.fread.datatable") # default:
TRUE
)
input
输入的文件,或者字符串(至少有一个"\n");
sep
列之间的分隔符;
sep2
分隔符内再分隔的分隔符,功能还没有应用;
nrow
读取的行数,默认-l全部,nrow=0仅仅返回列名;
header
第一行是否是列名;
na.strings
对NA的解释;
file
文件路径,再确保没有执行shell命令时很有用,也可以在input参数输入;
stringsASFactors
是否转化字符串为因子;
verbose
是否交互和报告运行时间;
autostart
机器可读这个区域任何行号,默认1L,如果这行是空,就读下一行;
skip
跳过读取的行数,为1则从第二行开始读,设置了这个选项,就会自动忽略autostart选项,也可以是一个字符,skip="string",那么会从包含该字符的行开始读;
select
需要保留的列名或者列号,不要其它的;
drop
需要取掉的列名或者列号,要其它的;
colClasses
类字符矢量,用于罕见的覆盖而不是常规使用,只会使一列变为更高的类型,不能降低类型;
integer64
读如64位的整型数;
dec
小数分隔符,默认"."不然就是","
col.names
给列名,默认试用header或者探测到的,不然就是V 列号;
encoding
默认"unknown",其它可能"UTF-8"或者"Latin-1",不是用来重新编码的,而是允许处理的字符串在本机编码;
quote
默认""",如果以双引开头,fread强有力的处理里面的引号,如果失败了就会用其它尝试,如果设置quote="",默认引号不可用
strip.white
默认TRUE,删除结尾空白符,如果FALSE,只取掉header的结尾空白符;
fill
默认FALSE,如果TRUE,不等长的区域可以自动填上,利于文件顺利读入;
blank.lines.skip
默认FALSE,如果TRUE,跳过空白行
key
设置key,用一个或多个列名,会传递给setkey
showProgress
TRUE会显示脚本进程,R层次的C代码
data.table
TRUE返回data.table,FALSE返回data.frame
http://www.cda.cn/uploadfile/image/20170428/20170428070250_86359.png
可见1.8GB的数据读入94秒,读入文件速度非常快
fwrite
对数据框数据进行处理后,需要保存到文件,我们就可以使用fwrite多线程写出,速度特别快