R找不到函数";%“多帕%”;
在Windows 10的RStudio中,我编写了一个并行执行计算的函数,如下所示:R找不到函数";%“多帕%”;,r,parallel-processing,R,Parallel Processing,在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)
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)
}
# Generated by roxygen2 (4.1.1): do not edit by hand
export(doSomething)
如果我从R脚本将函数加载到内存中,这将非常有效;但是,我想把它包含在我正在编写的包中。因此,在包文件中,我会小心地标识外部函数的名称空间,并在说明
文件中引用它们的包。例如:
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)
}
在说明
文件中:
...
Imports:
foo,
bar,
doParallel,
foreach,
parallel
(编辑)命名空间文件包含以下内容:
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)
}
# 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中的并行性。这些包的旧版本中存在的Bug现在被删除。我应该提到的是,即使您没有在项目/包中直接使用这些包,它也很可能会有所帮助。您的描述文件中是否有包含foreach包的“依赖”行。描述文件中的导入行最好位于命名空间文件中。您应该在描述文件中包含这一行:Depends:R(>=2.14.0)、foreach、parallel、doparallel我想您想要importFrom(foreach,“%dopar%”)在名称空间文件中这可能不是正确的答案,但您认为R运算符总是需要在其中缀语法中使用值得重新检查。您应该始终能够将其用作foreach::
%dopar%(arg1,arg2)
。这就是解析器将其转换为的内容。arg1和arg2将是:.packages=c(“foo”、“bar”)
和工作(a、b、c)