当前位置: 首页 > 知识库问答 >
问题:

使用foreach时是否导入R中的“并行”包

太叔马鲁
2023-03-14

我在foreachR包中使用foreach()函数进行并行计算。除了这个函数之外,我认为还需要在domc包中使用registerdomc()函数。

但是,当我编写描述文件时,导入部分包含DOMC(>=1.3.0)和foreach(>=1.4.1),但是当我运行代码时,错误指示:无法找到ITER函数。因此,我还导入迭代器包。

似乎仍然存在错误:mclapply()函数将由foreach()使用,并且该函数同时出现在parallemulticore包中。我在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’ 

这很奇怪:尽管我显式地导入迭代器多核的包,但在加载我自己的包后,我仍然不能使用它们的函数······相反,我必须显式运行:

library(iterators)
library(multicore)

为了在我的包中使用我自己的函数,它利用了并行计算。我的包裹书写有什么问题吗?太感谢你们了!


共有1个答案

谷梁子濯
2023-03-14

如果通过在“depends”中添加domc来修改描述文件,那么“不能找到iter函数”错误将消失,并且在加载包时,foreach迭代器domc函数将可用,这似乎是您的首选项。编写R扩展的第一章讨论了“imports”和“depends”之间的区别。通常,最好使用“导入”来避免强制您的包的用户加载仅在包中需要的包,但它有用途。

实际上,您看到的“无法找到iter函数”错误是由domc包中的bug引起的,使用“depends”而不是“imports”可以解决这个bug。您的包应该只需要导入它直接使用的包,因此如果您没有显式调用ITERMCLApply,则不必导入迭代器parallemulticore。而且由于paralle包含了multicore,因此永远不要同时导入parallemulticore,这将避免出现您看到的警告消息。

我向包维护者提交了domcbug的修复程序,因此您应该能够在包的下一个版本中将foreachdomc导入到包中而不会出错。

 类似资料:
  • 本文向大家介绍R使用rio导入数据,包括了R使用rio导入数据的使用技巧和注意事项,需要的朋友参考一下 示例 从许多常见文件格式导入数据的一种非常简单的方法是使用rio。该软件包提供了import()包装许多常用数据导入功能的功能,从而提供了标准接口。只需将文件名或URL传递给即可import(): import()也可以从压缩目录,URL(HTTP或HTTPS)和剪贴板中读取。rio包githu

  • 问题内容: 例: 数组仍保留其原始值,是否可以通过迭代函数对数组元素进行写访问? 问题答案: 回调传递给元素,索引和数组本身。 编辑 -如注释中所述,该函数可以采用第二个参数,该参数将用作每次对回调的调用中的值: 第二个例子说明了自己是在回调中设置的。有人可能认为调用中涉及的数组可能是的 默认 值,但无论出于何种原因,它都不是。会如果没有提供第二个参数。 (注意:如果回调是一个函数,则上述内容不适

  • 本文向大家介绍php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比,包括了php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比的使用技巧和注意事项,需要的朋友参考一下 判断某字符是否包含与某于数组中,方法有很多,刚学习php的新手们估计偏向于使用循环来解决,对于一般的小网站来说,这种解决

  • 本文向大家介绍如何在PowerShell foreach并行循环中使用PSCustomObject?,包括了如何在PowerShell foreach并行循环中使用PSCustomObject?的使用技巧和注意事项,需要的朋友参考一下 要在Foreach并行循环内使用PSCustomObject ,我们首先需要考虑如何在循环内使用变量。 因此,让我们看看是否可以在$out变量中存储或更改值。 示例

  • 我需要修改下面的代码,以使用循环与常规foreach循环。 我遇到的问题是将对象传递给foreach循环。我刚开始使用循环-有没有人对此有一些信息? 当前代码 问题是列表将包含3000+项,循环将循环每一项,我需要并行地运行它们。 因此,我想使用函数,但我无法通过传递对象来使其工作。