【发布时间】:2018-03-18 02:34:33
【问题描述】:
考虑以下函数定义
library(doParallel)
f_print <- function(x)
{
print(x)
}
f_foreach <- function(l)
{
foreach (i=l) %do%
{
f_print(i)
}
}
f_foreach_parallel <- function(l)
{
doParallel::registerDoParallel(1)
foreach (i=l) %dopar%
{
f_print(i)
}
}
功能使用:
> f_foreach(c(1,2))
[1] 1
[1] 2
[[1]]
[1] 1
[[2]]
[1] 2
> f_foreach_parallel(c(1,2))
Show Traceback
Rerun with Debug
Error in { :
task 1 failed - "impossible de trouver la fonction "f_print""
[Error: could not find function f_print]
>
您能否帮助解释为什么foreach 涉及并行性时f_print() 不可见?我们如何在这个平行的foreach 中使用f_print()?任何与此相关的文档?
【问题讨论】:
-
第二个功能对我有用,没有错误。我在 R 3.4.2 上运行每个包中的最新版本(doParallel 1.0.11 和 foreach 1.4.3)。
-
这令人费解。我使用的是 doParallel_1.0.10 和 foreach_1.4.3。我刚刚更新到与您相同的最新版本,问题仍然存在。有什么想法吗?
-
这很奇怪。我只是用新版本的 R 重新运行了代码,并没有出现错误。您在 Windows 中工作吗?如果是这样,您可能必须像这样导出函数:
foreach (i=l, .export=c("f_print")) %dopar%。如果这可行,那么问题与snow和mcapply之间的区别有关,其中第一个适用于所有操作系统,而第二个仅适用于 *nix。我正在运行 openSuse linux。 -
你说的对。我使用 Windows,确实 export 解决了它。那里有些曲折。此外,
foreach与并行不会正常返回列表foreach
标签: r function parallel-processing scope