gpt4 book ai didi

R找不到函数 "%dopar%"

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

在Windows 10的RStudio中,我编写了一个并行执行计算的函数,如下所示:

doSomething = function(a, b, c) {

# Inner function that does the actual work when parallelised
work = function (a, b, c) {
# Do something
e = func1(a, b)
f = func2(c)
result = e + f

return(result)
}

# Carry out work in parallel
cl = makeCluster(6)
registerDoParallel(cl)
output = foreach(i = 1:10, .packages=c("foo", "bar")) %dopar%
work(a, b, c)
stopCluster(cl)

return(output)
}

如果我从R脚本将函数加载到内存中,则可以正常工作。但是,我想将其包含在我正在编写的程序包中。这样,在包文件中,我小心地标识了外部函数的 namespace ,并在 DESCRIPTION文件中引用了它们的包。例如:
doSomething = function(a, b, c) {

# Inner function that does the actual work when parallelised
work = function (a, b, c) {
# Do something
e = foo::func1(a, b)
f = bar::func2(c)
result = e + f

return(result)
}

# Carry out work in parallel
cl = parallel::makeCluster(6)
doParallel::registerDoParallel(cl)
output = foreach::foreach(i = 1:10, .packages=c("foo", "bar")) %dopar%
work(a, b, c)
parallel::stopCluster(cl)

return(output)
}

并在 DESCRIPTION文件中:
...
Imports:
foo,
bar,
doParallel,
foreach,
parallel

(编辑) NAMESPACE文件包含以下内容:
# Generated by roxygen2 (4.1.1): do not edit by hand

export(doSomething)

问题是,当我构建程序包并从该程序包中运行该函数时,出现以下错误,执行停止:
Error in doSomething(a, b, c):
could not find function "%dopar%"

由于 %dopar%是运算符,而不是函数,因此我不能在我的包函数中以 foreach::开头。

我不确定要使其正常工作需要做什么。此外,我所阅读的类似问题中有95%是由 .packages()的遗漏引起的,而不是导致 %dopar%运算符本身未被识别而导致的错误。这似乎不是这里的原因。

请帮忙!

最佳答案

foreach%dopar%问题的快速解决方案是重新安装以下软件包:

install.packages("doSNOW")

install.packages("doParallel")

install.packages("doMPI")

以上软件包负责R中的并行性。这些软件包的旧版本中存在的错误已被删除。我应该提到,即使您没有在项目/程序包中直接使用这些程序包,它也很有可能会有所帮助。

关于R找不到函数 "%dopar%",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33250475/

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