我在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’
imports
和iterators
的两个包,我仍然无法在加载我自己的包后使用它们的函数...相反,我有明确地运行:
multicore
为了在我的包中使用我自己的函数,它使用并行计算。我的包装写作有什么问题吗?非常感谢你!
答案 0 :(得分:2)
如果您通过将doMC
添加到“取决于”来修改您的DESCRIPTION文件,那么“找不到iter函数”错误就会消失,并且foreach
,iterators
中的函数会起作用加载软件包时,doMC
将可用,这似乎是您的偏好。 Writing R Extensions的第一章讨论了“进口”和“取决于”之间的差异。通常,最好使用“Imports”来避免强制包的用户加载只在包中需要的包,但它有用途。
实际上,您看到的“无法找到iter函数”错误是由doMC
包中的错误引起的,并且使用“Depends”而不是“Imports”可以解决此错误。您的软件包应该只需要导入它直接使用的软件包,因此如果您没有明确调用iter
或mclapply
,则不必导入iterators
,{{1} },或parallel
。由于multicore
已归入parallel
,因此您永远不应同时导入multicore
和parallel
,这应该避免您看到的警告消息。
我向软件包维护者提交了multicore
错误的修复程序,因此您应该可以将doMC
和foreach
导入到软件包中而不会在下一版本的软件包中出错