r - R中使用foreach时是否导入 "parallel"包

标签 r foreach parallel-processing domc

我正在使用foreach() foreach 中的函数用于并行计算的 R 包。除了这个功能之外,我认为还需要使用 registerDoMC() doMC 中的函数包裹。

但是,当我写下我的DESCRIPTION时文件,Imports部分包含 doMC (>= 1.3.0), foreach (>= 1.4.1) ,但是当我运行代码时,出现错误指示: 找不到 iter功能。于是,我也import iterators包裹。

看来还是有错误:mclapply()函数由 foreach() 使用,并且此函数出现在 parallel两者中和 multicore包裹。我将这两个包都包含在 Imports 中部分,但是当我运行 search() 时,出现警告:

Warning messages:
1: replacing previous import ‘mclapply’ when loading ‘parallel’ 
2: replacing previous import ‘mcparallel’ when loading ‘parallel’ 
3: replacing previous import ‘pvec’ when loading ‘parallel’ 

这很奇怪:尽管我明确地 imports iterators 的两个包和multicore ,在加载我自己的包后我仍然无法使用它们的功能...相反,我必须显式运行:

library(iterators)
library(multicore)

为了在我的包中使用我自己的函数,该函数利用并行计算。我的包裹写的有问题吗?非常感谢!

最佳答案

如果您通过将 doMC 添加到“Depends”来修改您的描述文件,那么“找不到 iter 函数”错误就会消失,并且来自 foreach 的函数、 iteratorsdoMC 将在您的包加载时可用,这似乎是您的偏好。第一章Writing R Extensions讨论“导入”和“依赖”之间的区别。一般来说,最好使用“导入”以避免强制包的用户加载仅在包内需要的包,但它有用途。

实际上,您看到的“找不到 iter 函数”错误是由 doMC 包中的错误引起的,使用“Depends”而不是“Imports”可以解决此错误。您的包应该只需要导入它直接使用的包,因此如果您没有显式调用 itermclapply,则不必导入 迭代器并行多核。由于 parallel 包含了 multicore,因此您永远不应该同时导入 parallelmulticore,这样应该避免出现警告消息你看到的。

我向软件包维护者提交了 doMC 错误的修复程序,因此您应该能够将 foreachdoMC 导入到软件包中,而无需包的下一版本中出现错误。

关于r - R中使用foreach时是否导入 "parallel"包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18670180/

相关文章:

java - 并行化异构任务的局限性

r - 传递不带反引号的运算符

javascript - Vanilla JS,尝试访问数组中的对象

python - 如何在读取时不写入文件,反之亦然

php - 为什么总是使用 while 循环来获取 mysql 结果?

java - foreach 循环字符串将数字相乘

c - 在多线程应用程序中用 C 语言制作目录树

r - 合并或覆盖晶格面板中的xyplots

javascript - 是否可以在 spotfire 文本区域显示图像/消息以等待数据加载?

r - ggplot 上 geom_point 和 geom_smooth 的不同色标