9

当只在包的描述中导入(不依赖)foreach时,如何避免在包的函数中“找不到函数“%dopar%””?当我在函数中使用 foreach::foreach 时,有没有类似 foreach::%dopar% 的方法?谢谢你。

代码如:

在功能

foreach::foreach(1:9) %dopar% {

...}

在描述中

Imports: 
    Matrix,
    parallel,
    foreach,
   doParallel
4

3 回答 3

12

以下对我有用。定义一个本地%do%%dopar%如下

`%dopar%` <- foreach::`%dopar%`
`%do%` <- foreach::`%do%`

然后你应该能够运行

foreach::foreach(i = 1:9, .combine = "+") %dopar% {i}
foreach::foreach(i = 1:9, .combine = "+") %do% {i}
于 2017-05-11T15:31:57.990 回答
7

您需要使用反引号:(foreach::`%dopar%`或引号foreach::"%dopar%"也可以)。

于 2015-05-13T14:11:56.653 回答
4

@凯文禅,

我遇到了同样的问题,但我想我只是通过使用命名空间文件中的“importFrom”字段来解决它。我使用 Roxygen2 来记录,所以我简单地包含了标签:

#' @importFrom foreach %dopar%

调用函数foreach。它在命名空间文件中创建了一个字段,如下所示:

importFrom(foreach,"%dopar%")

所以如果你不使用 Roxygen2,你可以把那行放在你的命名空间中,这样也可以解决问题。

这应该可以防止起重机检查抱怨。但是,一旦您尝试在尚未通过以下方式加载和附加“foreach”包的计算机上运行代码:

library(foreach)

如果在您的说明文件中“导入”而不是“依赖”下列出“foreach”,您将收到一条消息,即找不到 %dopar%。因此,请确保 foreach 列在“取决于”字段中。

于 2016-09-10T07:13:35.307 回答