【发布时间】: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 会抱怨。
证据
似乎仅仅导入这样的包是不够的。以包roxygen2(CRAN)为例。它依赖于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