美文网首页
R 中使用多线程mclapply()对当前目录下的所有同一类型文

R 中使用多线程mclapply()对当前目录下的所有同一类型文

作者: 一车小面包人 | 来源:发表于2022-05-25 21:48 被阅读0次

当一个目录下的文件都要执行相同的函数流程的时候,一次次执行函数相当的麻烦,使用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)删除即可

相关文章

网友评论

      本文标题:R 中使用多线程mclapply()对当前目录下的所有同一类型文

      本文链接:https://www.haomeiwen.com/subject/blaeprtx.html