我正在开发一个建议 R 并行包的包(所以我的描述有一个Suggests: parallel (>= 1.13.1)
语句。它在OSX和Linux下编译得很好但是在在Windows上构建(使用win-builder)。这是win-builder吐出的install.log的结尾:
*** 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
}
关于问题是什么的任何想法?
答案 0 :(得分: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)亲自到达,否则你可以给他发电子邮件。
答案 1 :(得分:0)
问题可能是此程序包使用mclapply
r = parallel::mclapply(x, stats::smooth.spline)
mcapply
仅适用于doMC
doMC包充当foreach和并行包的多核功能之间的接口,最初由Simon Urbanek编写,并且并行地并入R2.14.0。多核功能目前仅适用于支持fork系统调用的操作系统(这意味着不支持Windows)
mclapply
位于parallel
范围内,但
doParallel包是doSNOW和doMC的合并,就像并行是雪和多核的合并一样。