我是编程新手,我正在尝试使用现有代码在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 配合使用,更重要的是,您不知道可用的资源,因此只有用户才能告诉您何时可以安全使用。多核计算机通常是共享的,因此使用所有检测到的内核是一个非常糟糕的主意。用户应该能够显式启用它,但默认情况下不应启用它。