仅在包说明中导入 foreach 时如何使用 %dopar%

how to use %dopar% when only import foreach in DESCRIPTION of a package

当只在包的描述中导入(不依赖)foreach 时,如何避免在包的函数中使用 "could not find function "%dopar%""?当我在函数中使用 foreach::foreach 时,有没有像 foreach::%dopar% 这样的方法?谢谢。

代码如下:

函数中

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

...}

在描述中

Imports: 
    Matrix,
    parallel,
    foreach,
   doParallel

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

@Kevin Zen,

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

#' @importFrom foreach %dopar%

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

importFrom(foreach,"%dopar%")

因此,如果您不使用 Roxygen2,则可以将该行放在您的命名空间中,这样也可以解决问题。

这应该可以防止 cran check 抱怨。但是,一旦您尝试 运行 尚未通过以下方式加载和附加 "foreach" 程序包的计算机上的代码:

library(foreach)

如果 "foreach" 在描述文件中的 "Imports" 下而不是 "Depends" 下列出,您将收到一条消息,指出未找到 %dopar%。因此,请确保 foreach 列在 "Depends" 字段中。

以下对我有用。定义一个局部%do%%dopar%如下

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

那你应该可以运行

foreach::foreach(i = 1:9, .combine = "+") %dopar% {i}
foreach::foreach(i = 1:9, .combine = "+") %do% {i}