【问题标题】:Importing snowfall into custom R package将降雪量导入自定义 R 包
【发布时间】:2016-07-17 00:41:27
【问题描述】:

我正在开发一个 R 包,它需要使用 snowfall 包提供的并行化。 snowfall 似乎没有像ggplot2data.table 等其他包一样导入。我在描述文件、名称空间文件中包含了snowfallrlecuyersnow , 并作为函数本身的导入参数。当我尝试访问此功能时,我收到以下错误:

Error in sfInit() : could not find function "setDefaultClusterOptions"

sfInit 函数似乎有一个 nostart / nostop 参数,它说它与 sfInit 的嵌套使用有关,但这似乎对我也不起作用。

实际代码本身使用sfInit(这是我得到错误的地方),一些sfExports 和sfLibrarys,以及sfLapply

可能的解决方案: 如果我将 snow 从导入部分移动到描述文件中的依赖部分,它似乎可以工作。我不知道为什么。

【问题讨论】:

  • 系统设置、版本、执行这些操作的实际代码?看起来 pkg:snow 没有正确连接。
  • 我在描述文件中有雪,我可以在命名空间中看到一个导入(雪)。我还在函数中添加了一个 #' @import snow。还有什么我应该做的吗?
  • 如果我在包装代码本身中显式调用 snow,则包可以正常工作。
  • 是否有任何解决方案(除了在导入部分添加雪)?我有同样的问题。将 Roxygen2 与 importFrom snow setDefaultClusterOptions 一起使用,但返回相同的错误。
  • ...顺便说一句,您从snowfall 中获得的收益是否超过了您的成本?作为一个可用性包装器,我从来没有觉得它改善了我的体验......但当我偶然发现它时,也许我已经离兔子洞太远了。除非您有一些特殊原因想要使用snowfall,否则您可能需要考虑使用cran.r-project.org/web/packages/future/index.html。它正在积极开发中,作者似乎致力于支持各种各样的后端。

标签: r snowfall


【解决方案1】:

当你在“依赖”中包含一个包时,当一个人附加你的包时,他们也会将你的包所依赖的包附加到他们的命名空间。

此站点上的other questions 很好地解释了 Depends 和 Imports 之间的这种差异和其他差异。

如果您查看{snowfall} 的说明,您会发现它取决于{snow}。有理由认为降雪的作者知道我们不知道的事情,并且{snow} 必须附加到全局搜索路径才能工作。事实上,这是我上面链接的问题的最佳答案中的最高警告......

...如果您的包依赖于包 A,而包 A 本身“依赖”于 另一个包裹 B,您的包裹可能需要在 A 上附加一个 "取决于指令。

这是因为包 A 中的函数是用 期望包 B 及其功能将附加到 search() 路径。

所以,就你而言,碰巧所有{snowfall} 想要的是{snow},而你恰好提供了它。但是,看起来更正确的行为可能是您直接依赖{snowfall}

【讨论】:

    【解决方案2】:

    setDefaultClusterOptionssnow 包中的一个函数。你也需要导入它。

    【讨论】:

    • 我在描述文件中有雪,我可以在命名空间中看到一个导入(雪)。我还在函数中添加了一个 #' @import snow。还有什么我应该做的吗?
    • 如果我在包装代码本身中显式调用 snow,则包可以正常工作。
    • 我会只导入一个包所需的功能,而不是导入整个包。如果您使用 roxygen2,请使用 '# @importFrom snow setDefaultClusterOptions
    猜你喜欢
    • 1970-01-01
    • 2013-08-17
    • 2017-02-22
    • 2020-10-02
    • 2021-06-25
    • 2017-11-29
    • 2012-06-17
    • 2015-10-16
    • 2012-03-03
    相关资源
    最近更新 更多