将依赖项正确添加到 r 包中,以便它们自动安装
Adding dependencies properly to an r package, so that they install automatically
我正在制作我的第一个 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 包的行为是,如果有未安装的依赖项,它会随安装一起安装。我缺少哪些步骤才能让我的包裹模仿这种行为?
根据我的经验,在开发您的第一个软件包时,一个好的策略是检查其他人的工作。最简单的方法是在 Github 上查看一些您最喜欢的软件包。例如,这是我的一个 DESCRIPTION 文件的一部分:
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。
设置完成后,您可以运行:
# This should point to the folder of your DESCRIPTION file
setwd("/path/to/your/package/")
roxygen2::roxygenise(clean = TRUE)
不要直接修改NAMESPACE!这应该足以安装您的软件包或将其放在 GitHub.
上
然而,这只是冰山一角,检查一下 this post out and then read up on the details in this book 可能是个好主意。
更新:鉴于@Benjamin 的评论,我发现我漏掉了你问题的一部分。 repos = NULL, type = "source"
禁止安装依赖项。更好的方法是使用 devtools
。我不确定这是否是正确的方法,但是当我已经有一个 tarball 并且需要安装它时,我使用类似的东西:
# In Windows use copy and paste directly on the file to get a link
devtools::install_url("C:/custom_packages/my_package_0.0.0.9000.tar.gz")
我正在制作我的第一个 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 包的行为是,如果有未安装的依赖项,它会随安装一起安装。我缺少哪些步骤才能让我的包裹模仿这种行为?
根据我的经验,在开发您的第一个软件包时,一个好的策略是检查其他人的工作。最简单的方法是在 Github 上查看一些您最喜欢的软件包。例如,这是我的一个 DESCRIPTION 文件的一部分:
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。
设置完成后,您可以运行:
# This should point to the folder of your DESCRIPTION file
setwd("/path/to/your/package/")
roxygen2::roxygenise(clean = TRUE)
不要直接修改NAMESPACE!这应该足以安装您的软件包或将其放在 GitHub.
上然而,这只是冰山一角,检查一下 this post out and then read up on the details in this book 可能是个好主意。
更新:鉴于@Benjamin 的评论,我发现我漏掉了你问题的一部分。 repos = NULL, type = "source"
禁止安装依赖项。更好的方法是使用 devtools
。我不确定这是否是正确的方法,但是当我已经有一个 tarball 并且需要安装它时,我使用类似的东西:
# In Windows use copy and paste directly on the file to get a link
devtools::install_url("C:/custom_packages/my_package_0.0.0.9000.tar.gz")