1

我正在开发一个建议R 的并行包的包(所以我的 DESCRIPTION 有一个Suggests: parallel (>= 1.13.1)声明。它在 OSX 和 Linux 下编译良好,但在 Windows 上构建时失败(使用win-builder)。这是 win-生成器吐出:

*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
*** arch - i386
Error: package or namespace load failed for 'spectrolab' in 
library.dynam(lib, package, package.lib):
DLL 'parallel' not found: maybe not installed for this architecture?
Error: loading failed
Execution halted
*** arch - x64
ERROR: loading failed for 'i386'
* removing 'd:/RCompile/CRANguest/R-devel/lib/spectrolab'

在此处找到 win-builder 的完整输出https://win-builder.r-project.org/4k9QC0st397H/

只有一个函数尝试使用parallel。它或多或少是这样的:

#' Smooth spline functions for spectra
#' ... roxygen stuff ...
#' @importFrom stats smooth.spline
#' @importFrom parallel detectCores mclapply
smooth.spectra = function(x, ...){

  p = requireNamespace("parallel", quietly = TRUE) && .Platform$OS.type != "windows"

  if(p){
     r = parallel::mclapply(x, stats::smooth.spline)
  } else {
     r = lapply(x, stats::smooth.spline)
  }
  r
}

关于问题是什么的任何想法?

4

2 回答 2

2

这很可能是一个赢家打嗝。我最近在 CRAN Windows 测试(与 win-builder 相同的设置)上观察到了同样的情况,但没有充分的理由:

https://www.r-project.org/nosvn/R.check/r-devel-windows-ix86+x86_64/doFuture-00install.html

除非 win-builder 维护者 (Uwe Ligges) 自己动手,否则你可以给他发一封电子邮件。

于 2017-09-14T00:42:41.500 回答
0

问题可能是这个包使用mclapply

r = parallel::mclapply(x, stats::smooth.spline)

mcapply仅适用于doMC

doMC 包充当 foreach 和 parallel 包的多核功能之间的接口,最初由 Simon Urbanek 编写并合并到 R2.14.0 的并行中。多核功能目前仅适用于支持 fork 系统调用的操作系统(这意味着不支持 Windows)

mclapplyparallel宇宙之下,但是

doParallel 包是 doSNOW 和 doMC 的合并,就像并行是雪和多核的合并一样。

于 2017-09-13T21:17:46.293 回答