最近要读取数千个文件做预处理,文件I/O和计算量都比较大。采用mclapply 进行了优化。mclapply 是 lapply 的并发版本,可以发挥多CPU核心的优势。
R 面向向量和矩阵运算,list 虽功能强大,但用法多样,示例如下,如何快速读入股票数据。
workdir <- "/usr/guest/workspace/data"
allFiles <- list.files(workdir)
#筛选出 60 或 00开头的文件
allFiles <- allFiles[grep("^60|^00",allFiles)]
#筛选出文件大小 在100字节以上
allFiles <- allFiles[ file.size(paste0(workdir,allFiles)) > 100 ]
#使用2个线程,mc.cores=2; 无header, 以逗号为分隔符,文件编码 gb18030
allData <- mclapply(allFiles, function(x)
na.omit( read.table( paste0( workdir, x), sep = ",",
header = F,fill=TRUE, fileEncoding = "gb18030", stringsAsFactors=FALSE)),
mc.cores = 2)
使用已有成熟代码,学习曲线比较陡峭,但可避免自己开发的错误。
借此地记录一下。
本文介绍如何使用R语言的mclapply函数优化大量文件的读取过程,通过多线程加速预处理工作,特别针对股票数据的读取进行优化。
491

被折叠的 条评论
为什么被折叠?



