R语言中通过apply/mclapply 尽量减少使用循环 for while

本文介绍如何使用R语言的mclapply函数优化大量文件的读取过程,通过多线程加速预处理工作,特别针对股票数据的读取进行优化。

最近要读取数千个文件做预处理,文件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)

使用已有成熟代码,学习曲线比较陡峭,但可避免自己开发的错误。

借此地记录一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值