gpt4 book ai didi

r - Windows 不支持“mc.cores”> 1

转载 作者:行者123 更新时间:2023-12-03 11:07:04 36 4
gpt4 key购买 nike

我是编程新手,我正在尝试使用现有代码在 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”代码块并运行它时,我收到错误“Windows 不支持'mc.cores'> 1”。
请建议我如何在 Windows 中使用并行处理,以减少运行代码的时间。
任何帮助将不胜感激。

最佳答案

(免责声明:我是这里 future 框架的作者)

future.apply 包提供 R 内置“应用”函数的并行版本。它是跨平台的,即它可以在 Linux、macOS 和 Windows 上运行。该软件包允许您经常将现有的 lapply() 替换为 future_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:

Do NOT use mcparallel() in packages except as a non-default option that user can set for the reasons Henrik explained. Multicore is intended for HPC applications that need to use many cores for computing-heavy jobs, but it does not play well with RStudio and more importantly you don't know the resource available so only the user can tell you when it's safe to use. Multi-core machines are often shared so using all detected cores is a very bad idea. The user should be able to explicitly enable it, but it should not be enabled by default.

关于r - Windows 不支持“mc.cores”> 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62080053/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com