【发布时间】:2018-03-27 17:02:02
【问题描述】:
我正在制作我的第一个 R 包,并且我正在尝试包含包依赖项。该软件包在我的机器上安装并运行良好,但我已经安装了所有依赖项。当另一个用户尝试安装并且他们没有安装所有依赖项时,他们会收到错误消息。
ERROR: dependency 'dplyr' is not available for package 'my_package'
我正在通过roxygen2 记录包。
我知道我应该在我的/R 文件中包含#'@import 行,它们会自动添加到DESCRIPTION 和NAMESPACE 文件中。
我的DESCRIPTION 文件如下所示:
Package: my_package
Title: What the Package Does (one line, title case)
Version: 0.0.0.9000
Authors@R: person("First", "Last", email = "first.last@example.com", role = c("aut", "cre"))
Description: What the package does (one paragraph).
Depends: R (>= 3.4.1)
License: What license is it under?
Encoding: UTF-8
LazyData: true
RoxygenNote: 6.0.1
Imports: dplyr,
descr
而我的NAMESPACE 看起来像这样:
export(my_function)
import(descr)
import(dplyr)
用户正在本地安装包:
install.packages("C:/custom_packages/my_package_0.0.0.9000.tar.gz/", repos = NULL, type = "source")
我读过的关于这个主题的答案说,在DESCRIPTION 和NAMESPACE 中拥有正确的导入语句应该是您记录依赖关系所需的全部内容,我在这里有。我安装的大多数 CRAN 软件包的行为是,如果有一个未安装的依赖项,它会与安装一起安装。我遗漏了哪些步骤以使我的包模仿这种行为?
【问题讨论】:
-
install.packages将在repos参数设置为 CRAN 存储库时自动安装所有依赖项(它比这更细微,但请耐心等待)。设置repos = NULL后,用户已切断对可以从中下载依赖项的存储库的访问。您可能需要考虑将源代码放在共享驱动器上并使用devtools::install_local而不是install.packages。但从根本上说,您的包结构没有任何问题。 -
这很有帮助,很好的解释!
install_local()似乎是我在这里所缺少的。