当只在包的描述中导入(不依赖)foreach时,如何避免在包的函数中“找不到函数“%dopar%””?当我在函数中使用 foreach::foreach 时,有没有类似 foreach::%dopar% 的方法?谢谢你。
代码如:
在功能
foreach::foreach(1:9) %dopar% {
...}
在描述中
Imports:
Matrix,
parallel,
foreach,
doParallel
当只在包的描述中导入(不依赖)foreach时,如何避免在包的函数中“找不到函数“%dopar%””?当我在函数中使用 foreach::foreach 时,有没有类似 foreach::%dopar% 的方法?谢谢你。
代码如:
在功能
foreach::foreach(1:9) %dopar% {
...}
在描述中
Imports:
Matrix,
parallel,
foreach,
doParallel
以下对我有用。定义一个本地%do%
或%dopar%
如下
`%dopar%` <- foreach::`%dopar%`
`%do%` <- foreach::`%do%`
然后你应该能够运行
foreach::foreach(i = 1:9, .combine = "+") %dopar% {i}
foreach::foreach(i = 1:9, .combine = "+") %do% {i}
您需要使用反引号:(foreach::`%dopar%`
或引号foreach::"%dopar%"
也可以)。
@凯文禅,
我遇到了同样的问题,但我想我只是通过使用命名空间文件中的“importFrom”字段来解决它。我使用 Roxygen2 来记录,所以我简单地包含了标签:
#' @importFrom foreach %dopar%
调用函数foreach。它在命名空间文件中创建了一个字段,如下所示:
importFrom(foreach,"%dopar%")
所以如果你不使用 Roxygen2,你可以把那行放在你的命名空间中,这样也可以解决问题。
这应该可以防止起重机检查抱怨。但是,一旦您尝试在尚未通过以下方式加载和附加“foreach”包的计算机上运行代码:
library(foreach)
如果在您的说明文件中“导入”而不是“依赖”下列出“foreach”,您将收到一条消息,即找不到 %dopar%。因此,请确保 foreach 列在“取决于”字段中。