使用foreach时是否在R中导入“parallel”包

时间:2013-09-07 05:43:58

标签: r foreach parallel-processing domc

我在foreach() R包中使用foreach函数进行并行计算。除了该函数,我认为还需要在registerDoMC()包中使用doMC函数。

但是,当我编写DESCRIPTION文件时,Imports部分包含doMC (>= 1.3.0), foreach (>= 1.4.1),但是当我运行我的代码时,错误表明:找不到{{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’ importsiterators的两个包,我仍然无法在加载我自己的包后使用它们的函数...相反,我有明确地运行:

multicore

为了在我的包中使用我自己的函数,它使用并行计算。我的包装写作有什么问题吗?非常感谢你!

1 个答案:

答案 0 :(得分:2)

如果您通过将doMC添加到“取决于”来修改您的DESCRIPTION文件,那么“找不到iter函数”错误就会消失,并且foreachiterators中的函数会起作用加载软件包时,doMC将可用,这似乎是您的偏好。 Writing R Extensions的第一章讨论了“进口”和“取决于”之间的差异。通常,最好使用“Imports”来避免强制包的用户加载只在包中需要的包,但它有用途。

实际上,您看到的“无法找到iter函数”错误是由doMC包中的错误引起的,并且使用“Depends”而不是“Imports”可以解决此错误。您的软件包应该只需要导入它直接使用的软件包,因此如果您没有明确调用itermclapply,则不必导入iterators,{{1} },或parallel。由于multicore已归入parallel,因此您永远不应同时导入multicoreparallel,这应该避免您看到的警告消息。

我向软件包维护者提交了multicore错误的修复程序,因此您应该可以将doMCforeach导入到软件包中而不会在下一版本的软件包中出错