【问题标题】:How to handle dependencies (`Depends:`) of imported packages (`Imports:`)如何处理导入包 (`Imports:`) 的依赖项 (`Depends:`)
【发布时间】:2013-04-21 18:36:41
【问题描述】:

我正在尝试在我的包的DESCRIPTION 文件中使用Imports: 而不是Depends:,但我仍然觉得我对此还有更多了解;-)

我从this post 学到的东西(顺便说一句:很棒的帖子!!!)我的包,比​​如mypkg,通过Imports: 导入(比如imported.pkg)都生活在imports:mypkg 环境中被附加到搜索路径。当试图找到imported.pkg 附带的foo 时,R 在遍历搜索列表之前先查找imports:mypkg。到目前为止,一切顺利。

实际问题

如果imported.pkg(由mypkg 导入)依赖某个其他包(在包的DESCRIPTION 文件的Depends: 部分中说明),我是否需要非常打包我的包的 Depends: 依赖项,以便 R 找到该包的功能?所以目前在我看来,否则 R 会抱怨。

证据

似乎仅仅导入这样的包是不够的。以包roxygen2CRAN)为例。它依赖于digest,同时导入一堆其他包。我导入了它(连同digest,因为mypkg 也需要它)并检查了环境imports:mypkg,它确实列出了digest 函数:"digest" %in% parent.env(asNamespace("mypkg")) 返回TRUE

然而,当从 within 一个属于mypkg 的函数运行roxygenize() 时,R 抱怨它找不到digest

【问题讨论】:

  • 您还需要在NAMESPACE 文件中声明一个importFrom。参见例如 stackoverflow.com/questions/7283134/…stackoverflow.com/a/13261139/602276
  • 我通过import(imported.pkg)import(digest) 在我的NAMESPACE 文件(整个包)中执行了实际导入,这也应该这样做,不是吗?如果发生故障,imports:mypkg 环境中也将没有 digest - 确实存在。
  • 我认为这属于此答案的“警告”部分:stackoverflow.com/a/8638902/967840
  • 啊,好吧!谢谢指点!还有一个问题:当我的函数调用我的包导入的包中的函数时,我是否需要做任何特别的事情来告诉R“嘿,在去搜索之前先看看imports:mypkg环境路径”(例如通过使用 ::)还是 R 自己解决?
  • 在这方面:我不能告诉 R 明确首先查看imports:mypkg,“无论如何”在“调用包的函数时也是如此”的意思依赖于未在包的NAMESPACE 文件中声明为 imports 的包?因为mypkg 会负责导入依赖项,所以它的功能实际上可以在imports:mypkg 中使用

标签: r import dependencies package


【解决方案1】:

你可以看看我的博客:http://r2d2.quartzbio.com/posts/package-depends-dirty-hack-solution.html 现在我有一个更好更清洁的解决方案,但尚未发布。 希望能帮助到你。

【讨论】:

  • 不错!非常感谢!
猜你喜欢
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多