当一个目录下的文件都要执行相同的函数流程的时候,一次次执行函数相当的麻烦,使用R的多线程可以并行处理,节约时间,提高工作效率
##当前的目录test下有两个文件:file1和file2
./test file1
./test file2
##重复执行的测试函数myTest()
myTest<-function(a,b) print(paste0(a,b))
关键函数是mclapply()
第一个参数:待批量处理的变量(列表或者向量)
第二个参数:重复执行函数
第三个参数:线程数目
##获取指定路径./test下的所有文件名称
myDir<-"./test"
allFiles<-dir(myDir)
##传统的处理方法是依次两次函数
myTest(allFiles[1]," processing>>>")
[1]file1 processing>>>
myTest(allFiles[2]," processing>>>")
[1]file2 processing>>>
##使用parallel这个R包进行多线程的并行处理
library(parallel)
cores_n<-detectCores()-1 #设置线程数为当前线程资源数目-1
##mclapply(待批量处理的变量(列表或者向量),
##重复执行的函数function(e) 函数名(e,...)
##(其中e代表第一个参数,...代表自定义函数中的第2、3....个参数)
##,mc.cores=设定的线程数目)
mclapply(allFiles,function(e) myTest(e," processing>>>"),mc.cores=cores_n)->tmp;rm(tmp)
[1]file1 processing>>>
[1]file2 processing>>>
#因为mclapply函数会将输出以列表的形式再默认返回(return)一次,所以可以将其默认返回值赋值给tmp,再使用rm(tmp)删除即可
网友评论