使用 foreach 函数并行计算

89_简单

我有一个文件夹,里面有 5000 个 csv 文件,每个文件属于一个位置,包含 1980 年到 2015 年的每日降雨量。文件的示例结构如下:

sample.file <- data.frame(location.id = rep(1001, times = 365 * 36), 
                      year = rep(1980:2015, each = 365),
                      day = rep(1:365, times = 36),
                      rainfall = sample(1:100, replace = T, 365 * 36))

我想读取一个文件并计算每年的总降雨量并再次写入输出。有多种方法可以做到这一点:

方法一

for(i in seq_along(names.vec)){

  name <- namees.vec[i]
  dat <- fread(paste0(name,".csv"))

  dat <- dat %>% dplyr::group_by(year) %>% dplyr::summarise(tot.rainfall = sum(rainfall))

 fwrite(dat, paste0(name,".summary.csv"), row.names = F)
}

方法二:

my.files <- list.files(pattern = "*.csv")
dat <- lapply(my.files, fread)
dat <- rbindlist(dat)
dat.summary <- dat %>% dplyr::group_by(location.id, year) %>% 
               dplyr::summarise(tot.rainfall = sum(rainfall))

方法三:

我想使用foreach. 如何使用do parallelfor each函数并行化上述任务

巴斯蒂安

以下是您的foreach request.

require(foreach)
require(doSNOW)
cl <- makeCluster(10, # number of cores, don't use all cores your computer have
                  type="SOCK") # SOCK for Windows, FORK for linux
registerDoSNOW(cl)
clusterExport(cl, c("toto", "truc"), envir=environment()) # R object needed for each core
clusterEvalQ(cl, library(tcltk)) # libraries needed for each core
my.files <- list.files(pattern = "*.csv")
foreach(i=icount(my.files), .combine=rbind, inorder=FALSE) %dopar% {
  # read csv file
  # estimate total rain
  # write output
}
stopCluster(cl)

但是当每次独立迭代的计算时间 (CPU) 高于其余操作时,并行化确实更好。在您的情况下,改进可能很低,因为每个内核都需要对读取和写入进行驱动器访问,并且由于写入是物理操作,因此最好按顺序进行(对硬件更安全,最终更高效)与多个文件的共享位置相比,每个文件在驱动器中都有独立的位置,需要索引等来区分您的操作系统 - 之前需要确认,这只是一个想法)。

HTH

巴斯蒂安

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在R并行计算中使用Reduce()函数?

来自分类Dev

如何在R并行计算中使用Reduce()函数?

来自分类Dev

使用openmp并行计算循环

来自分类Dev

使用位操作并行计算模数

来自分类Dev

使用openmp并行计算循环

来自分类Dev

使用Matlab进行并行计算

来自分类Dev

使用Scilab或Octave进行并行计算

来自分类Dev

R 中的并行计算(foreach %dopar% 中的 if 语句)

来自分类Dev

在队列集群上使用Python进行并行计算

来自分类Dev

如何使用C#进行并行计算

来自分类Dev

可能进行优化或使用并行计算

来自分类Dev

R中的并行计算:如何使用内核

来自分类Dev

如何使用Rayon进行PI的并行计算

来自分类Dev

使用Monte Carlo方法并行计算Pi

来自分类Dev

使用Dask和Xarray进行并行计算

来自分类Dev

在 C++ 中使用线程进行并行计算

来自分类Dev

使用 Open-MP 的多核并行计算。

来自分类Dev

如何使用foreach函数进行并行编码?

来自分类Dev

在R中进行并行计算时,如何在foreach()中将元素分配给群集

来自分类Dev

为什么使用降雪进行并行计算时不平衡负载?

来自分类Dev

是否可以使用ManagedCUDA包装器从Unity C#脚本运行并行计算?

来自分类Dev

MATLAB并行计算。Parfor:我可以在循环内使用输出吗?

来自分类Dev

使用OpenMPI和调试技巧并行计算数组总和

来自分类Dev

使用OpenMP的C ++中的并行计算不会耗费时间

来自分类Dev

使用bigmemory技术和并行计算找到最频繁的项目?

来自分类Dev

是否可以使用ManagedCUDA包装器从Unity C#脚本运行并行计算?

来自分类Dev

如何估计在R中使用并行计算运行ML代码的时间?

来自分类Dev

并行计算开销

来自分类Dev

并行计算

Related 相关文章

热门标签

归档