r - 当一些文件包含错误时并行处理运行多个文件
问题描述
我希望R
使用并行处理运行文件夹中的每个文件。一些R
文件包含故意错误。一旦遇到第一个错误,这些错误似乎会导致并行处理停止。有没有办法R
继续运行文件夹中的所有文件,为每个不包含错误的文件返回结果?
这是R
尝试运行文件夹中七个文件中的每一个的代码。七个文件中的三个包含错误并且不应运行,但我想获得四个不包含错误的文件的结果。并行处理代码只返回两个文件的结果,而不是四个文件。
setwd('C:/Users/mark_/Documents/simple R programs/')
library(parallel)
detectCores()
#[1] 12
#make a cluster
my.cluster <- makeCluster(3)
folderName <- 'run_all_these3'
files <- list.files(folderName, full.names=TRUE)
parSapply(my.cluster, files, source)
stopCluster(my.cluster)
这是文件夹中的七个文件run_all_these3
。这些文件的不同之处仅在于seed
输出CSV
文件的名称以及其中三个文件包含summ
的sum
. CSV
仅返回四个不包含错误的文件中的两个的输出文件。
我R
在Windows 10
笔记本电脑上运行。
文件:run1.R
set.seed(1234)
N <- 1000000000
my.stuff <- sample(1000, N, replace = TRUE)
my.sum <- sum(my.stuff)
print(my.sum)
write.csv(my.sum, file='my.sum1.csv', row.names=FALSE, quote=FALSE)
文件:run2.R
set.seed(4444)
N <- 1000000000
my.stuff <- sample(1000, N, replace = TRUE)
my.sum <- sum(my.stuff)
print(my.sum)
write.csv(my.sum, file='my.sum2.csv', row.names=FALSE, quote=FALSE)
文件:run3.R
set.seed(4321)
N <- 1000000000
my.stuff <- sample(1000, N, replace = TRUE)
my.sum <- summ(my.stuff)
print(my.sum)
write.csv(my.sum, file='my.sum3.csv', row.names=FALSE, quote=FALSE)
文件:run4.R
set.seed(1111)
N <- 1000000000
my.stuff <- sample(1000, N, replace = TRUE)
my.sum <- sum(my.stuff)
print(my.sum)
write.csv(my.sum, file='my.sum4.csv', row.names=FALSE, quote=FALSE)
文件:run5.R
set.seed(2222)
N <- 1000000000
my.stuff <- sample(1000, N, replace = TRUE)
my.sum <- summ(my.stuff)
print(my.sum)
write.csv(my.sum, file='my.sum5.csv', row.names=FALSE, quote=FALSE)
文件:run6.R
set.seed(2121)
N <- 1000000000
my.stuff <- sample(1000, N, replace = TRUE)
my.sum <- summ(my.stuff)
print(my.sum)
write.csv(my.sum, file='my.sum6.csv', row.names=FALSE, quote=FALSE)
文件:run7.R
set.seed(3434)
N <- 1000000000
my.stuff <- sample(1000, N, replace = TRUE)
my.sum <- sum(my.stuff)
print(my.sum)
write.csv(my.sum, file='my.sum7.csv', row.names=FALSE, quote=FALSE)
解决方案
您可以使用它foreach
来控制如何处理错误。
library(doParallel)
registerDoParallel(my.cluster <- makeCluster(3))
files <- c("doesnotexist.R")
foreach(file = files, .errorhandling = "remove") %dopar% {
source(file)
}
stopCluster(my.cluster)
您可以使用.combine
组合结果(c
,cbind
等),否则默认返回列表。
推荐阅读
- javascript - Sinon测试firebase云功能
- python - 如何在 Prettier for Visual Studio Code 中设置自动对齐?
- vue.js - 在 Vue 3.0 应用程序中安装 vue-apollo 时版本不匹配
- javascript - 异步等待构建一个带有许多可选部分的猫鼬查询,然后是一个最终的 exec
- javascript - Firestore 缓存不同步
- selenium - org.openqa.selenium.json.JsonException:无法确定类型来自:Y。最后 1 个字符读取:Y
- reactjs - Axios 删除不起作用,它在 chorme 的网络选项卡中显示待处理状态
- tailwind-css - Tailwind css 暗模式未启用
- sqlite - Libtool 在指定路径时搜索错误的目录
- c# - ConfigurationBuilder().AddEnvironmentVariables() 在 Mac 上不起作用