问题描述
我第一次尝试将 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 (将#修改为@)