将依赖项正确添加到r包,以便它们自动安装

时间:2018-03-27 17:02:02

标签: r r-package roxygen2

我正在创建我的第一个R包,我正在尝试包含包依赖项。该软件包在我的机器上安装并正常运行,但我已经安装了所有依赖项。当另一个用户尝试安装并且他们没有安装所有依赖项时,他们会收到错误。

ERROR: dependency 'dplyr' is not available for package 'my_package'

我正通过roxygen2记录包裹。

我知道我应该在#'@import个文件中添加/R行,并自动添加到DESCRIPTIONNAMESPACE个文件中。

我的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")

我已阅读过有关此主题的回答说,在DESCRIPTIONNAMESPACE中使用正确的import语句应该是记录依赖关系所需的全部内容,我在这里。我安装的大多数CRAN软件包的行为是,如果存在未安装的依赖项,它将与安装一起安装。我缺少哪些步骤以便我的包模仿这种行为?

1 个答案:

答案 0 :(得分:2)

根据我的经验,在开发第一个软件包时,一个好的策略是检查其他软件包的工作。最简单的方法是在Github上检查一些你最喜欢的包。例如,这是我的一个描述文件的一部分:

Depends: 
  R (>= 3.3.0)
License: GPL-3
Imports: 
  stringi (>= 1.1.7), 
  data.table (>= 1.10.4.3),
  methods (>= 3.3.0),
  quanteda (>= 1.1.0),
  scales (>= 0.5.0),
  stats (>= 3.3.0),
  utils (>= 3.3.0)

正如您所看到的,每个软件包都有一个最小版本(大多数只是我使用的版本,但对于某些版本,我测试过旧版本是否有效)。我使用Imports标记包和Depends只是为了表示我成功测试的最老的R版本。您应该几乎总是使用Imports或Suggests而不是Depends for packages。

完成设置后,您可以运行:

# This should point to the folder of your DESCRIPTION file    
setwd("/path/to/your/package/")  
roxygen2::roxygenise(clean = TRUE)

请勿直接更改NAMESPACE!这应该足以安装你的软件包或将它放在GitHub上。

然而,这只是冰山一角,最好先查看this post,然后阅读this book中的详细信息。

更新:鉴于@Benjamin的评论,我发现我错过了部分问题。 repos = NULL, type = "source"禁止安装依赖项。更好的方法是使用devtools。我不确定这是不是正确的方法,但是当我已经有一个tarball并且需要安装它时我会使用类似的东西:

# In Windows use copy and paste directly on the file to get a lin  
devtools::install_url("file:///C:/custom_packages/my_package_0.0.0.9000.tar.gz")