【问题标题】:how to use %dopar% when only import foreach in DESCRIPTION of a package仅在包的说明中导入foreach时如何使用%dopar%
【发布时间】:2015-07-24 20:18:54
【问题描述】:

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

代码如下:

在函数中

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

...}

在描述中

Imports: 
    Matrix,
    parallel,
    foreach,
   doParallel

【问题讨论】:

    标签: r foreach package domc doparallel


    【解决方案1】:

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

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

    那你应该可以跑了

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

    【讨论】:

    • 此解决方案适用于我,而这里的其他解决方案则不适用。谢谢。
    【解决方案2】:

    @Kevin Zen,

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

    #' @importFrom foreach %dopar%
    

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

    importFrom(foreach,"%dopar%")
    

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

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

    library(foreach)
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 您能否详细说明如何显式调用 %dopar%?我正在尝试运行以下不起作用。 foreach::foreach(i = 1:9, .combine = "+") foreach::`%dopar%` {i} 并且我尝试了各种与反引号的组合,但它通常会给出“意外符号”错误。谢谢!
      • @KevinZen 我不知道如何重现这个错误,我不记得曾经得到它。如果你使用引号,你会得到同样的结果吗?定义像`%dopar%` &lt;- foreach::`%dopar%` 这样的别名然后使用它呢?
      • 是的,如果我尝试在不使用 Roxygen2 的情况下明确定义此函数,则反引号和引号都不起作用。我意识到在使用 Roxygen2 时我不需要担心foreach::%dopar%。只需import(foreach) 就可以正常工作
      猜你喜欢
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 2017-08-22
      • 2011-04-23
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多