r语言 - Windows 不支持 'mc.cores' > 1



我是编程新手,我正在尝试使用现有代码在Windows中使用R的并行处理。

以下是我的代码片段:



if (length(grep("linux", R.version$os)) == 1){
num_cores = detectCores()
impact_list <- mclapply(len_a, impact_func, mc.cores = (num_cores - 1))
} 
# else if(length(grep("mingw32", R.version$os)) == 1){
#   num_cores = detectCores()
#   impact_list <- mclapply(len_a, impact_func, mc.cores = (num_cores - 1))
# 
# }
else{
impact_list <- lapply(len_a, impact_func)
}
return(sum(unlist(impact_list, use.names = F)))

这工作正常,我在 Windows 上使用 R,因此代码输入"else"语句,它使用 lapply(( 而不是通过并行处理运行代码。


我添加了"else if"语句以使其适用于Windows。因此,当我取消注释"else if"代码块并运行它时,我收到错误"'mc.cores'> 1 在 Windows 上不受支持"。 请建议如何在窗口中使用并行处理,以便减少运行代码所需的时间。 任何帮助将不胜感激。

(免责声明:我是未来框架的作者(

future.apply包提供了 R 内置"apply"函数的并行版本。 它是跨平台的,即它可以在Linux,macOS和Windows上运行。该软件包允许您通常只用future_lapply()调用替换现有lapply(),例如

library(future.apply)
plan(multisession)
your_fcn <- function(len_a) {
impact_list <- future_lapply(len_a, impact_func)
sum(unlist(impact_list, use.names = FALSE))
}

关于 mclapply((本身:如果您在代码中使用parallel::mclapply(),请确保始终有一个选项不使用它。 原因是它不能保证在所有环境中都能工作,也就是说,它可能不稳定并崩溃 R。 在R-devel线程"mclapply在运行GAM时在MacOS上返回NULL"(https://stat.ethz.ch/pipermail/r-devel/2020-April/079384.html(中,mclapply()的作者在2020-04-28写道:

不要在软件包中使用 mcparallel((,除非作为用户可以出于 Henrik 解释的原因设置的非默认选项。多核适用于需要使用许多内核进行计算密集型作业的 HPC 应用程序,但它不能很好地与 RStudio 配合使用,更重要的是,您不知道可用的资源,因此只有用户才能告诉您何时可以安全使用。多核计算机通常是共享的,因此使用所有检测到的内核是一个非常糟糕的主意。用户应该能够显式启用它,但默认情况下不应启用它。

最新更新