与 for each 和 %dopar% 的并行计算不生成文件

问题描述

我第一次尝试将 doParallel 包与 foreach 和 %dopar% 一起使用,因为我需要提高计算速度。

尽管代码在执行时没有出现任何错误,但文件并未存储在输出文件夹中。

我有一个文件路径列表 (list_files) 和一个我之前使用 sapply 验证过的函数 (my_function)。当我使用 sapply 时,输出存储在输出位置。使用 foreach 和 %dopar% 在我的输出位置不返回任何输出

# Define my function and call it my_function
my_function <- function(input_dir,output_dir) {
  tryCatch(
    expr = {     
      file <- read.csv(input_dir,sep = "\t",col.names = c("column1","column2"))
      file <- as_tibble(file)
      file_noNA <- file %>% filter(!is.na(column1))
      name <- substr(input_dir,nchar(input_dir)-8,nchar(input_dir)-4)
      save(file_noNA,file = paste0(output_dir,name,".rds"))
    }
  )
}

library("parallel")
library("foreach")
library("doParallel")

# Set number of cores
n.cores <- 5   

# Check doParallel package
doParallel::registerDoParallel(n.cores)
getDoParWorkers()

# Apply function with parallel computing
foreach(i = list_files) %dopar% function(x) {
         my_function(
           input_dir = x,output_dir = output_location)
  }

这是我尝试过的(没有成功):

  • 分配结果
  • 使用 foreach(i = list_files,.combine = 'c') %dopar% function(x) {...}
  • 使用单个文件而不是 list_files
  • 减少内核数量

我是否需要添加导出语句,例如 .export=ls(envir=globalenv()) 要么 .export=ls() ?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)