gpt4 book ai didi

r - 为多个操作系统使用并行或 doParallel 的自定义包作为 CRAN 包

转载 作者:行者123 更新时间:2023-12-04 13:40:20 26 4
gpt4 key购买 nike

我正在为 R 构建一个包,我希望它能够跨平台。我在Linux下开发,函数mclapply将从 parallel 开始使用包裹。 Windows(使用 doParallel )不支持此软件包。我真的很喜欢 parallel包虽然因为它的简单性和速度,我不知道这是否应该是为 CRAN 提供 2 个不同版本的包的原因,用于单独的操作系统(似乎需要额外的维护工作),更不用说它是否是甚至允许。

想法?

另外,现在我正在关注 parallel

mclapply(ldata, function(x), mc.cores=cores)

相当于 doParallel
cl <- makeCluster(cores)
parLapply(cl, ldata, function(x))

那是对的吗?

最佳答案

首先,两个mclapplyparLapplyparallel包,虽然 mclapply实际上并没有在 Windows 上并行运行。 parLapply在所有支持的平台上并行运行,但并不总是像 mclapply 那样高效. doParallel包与 foreach 一起使用包,并充当 parallel 的适配器包裹。

要编写适用于 Windows 和非 Windows 的包,您有多种合理的选择:

  • 只需使用 parLapply因为它无处不在
  • 使用parLapply在 Windows 和 mclapply 上其他地方
  • 使用doParallelforeach
  • doParallel包很方便,因为它使用了 mclapply在非 Windows 平台上。例如:
    library(doParallel)
    registerDoParallel()
    foreach(i=1:10, .options.snow=list(preschedule=TRUE)) %dopar% {
    Sys.sleep(2)
    }

    这使用 mclapply在 Linux 和 Mac OS X 上,但在 Windows 上会在后台自动创建 PSOCK 集群对象。使用 preschedule=TRUE (在 doParallel 1.0.3 中添加)将导致 doParallel使用 clusterApply 预先安排任务在内部,很像 parLapply .

    请注意,如果您显式创建并注册了一个集群对象,那么 mclapply无论平台如何,都不会使用。它可以正常工作,但可能效率不高。使用 mclapply ,您必须调用 registerDoParallel带有数字参数,或者根本没有参数。

    您可以查看 boot 的源代码包以获取如何使用 mclapply 的示例或 parLapply取决于你的平台。

    关于r - 为多个操作系统使用并行或 doParallel 的自定义包作为 CRAN 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18588896/

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