通过 library() / 描述文件使用 R 包中的依赖项
Use dependencies in R packages through library() / Description file
我正在编写一个 R 包,它有几个其他包的依赖项,其中一些在 CRAN 中可用,其他一些是自制的。
根据帮助,library("my_package")
将在我之前安装包后加载包的名称空间,即 install.package("my_package")
.
然而,一旦我安装了包,我就可以通过 my_package::my_function()
使用已安装但未加载的包的所有功能,所以如果我的包有依赖项,除了将它们添加到 DESCRIPTION
] 文件:
Imports:
dplyr,
my_package2,
ggvis,
在包文件夹的根目录中。
我是否必须通过 library()
加载新包的依赖项,否则如果最终用户尚未在其计算机上安装,则最终用户会看到错误,因为 Imports[=25 中指定了所需的包=] 节?
不,用户不必加载 my_package
中函数使用的包。
您在 DESCRIPTION
文件中的 Imports:
下列出了一个包,这意味着在安装 my_package
期间,R 将检查您的系统上是否存在该包.这意味着 my_package
中的函数可以按照您的建议使用 ::
表示法使用这些包中的函数。
推荐使用 ::
表示法来引用其他包中的函数,但也有其他选项:
为了使 dplyr
中的所有函数无需 my_package
中的 ::
即可访问,您可以将 import(dplyr)
添加到NAMESPACE
文件。如果您使用一个包中的许多函数,这很方便。
如果您只打算使用 dplyr
中的函数 select
,您可以将 importFrom(select, dplyr)
添加到 NAMESPACE
文件中。
您也可以将包添加到 Depends:
下的 DESCRIPTION
文件中。这意味着当您使用 library(my_package)
时,包将加载到全局环境中。这几乎不是一个好的解决方案。
依赖关系的一般想法是 R 是 my_package
将加载它所依赖的包的 "it's own version"。因此,您始终可以确定自己会,例如,使用 dplyr
包中的函数 select()
,如您所愿。例外是使用 Depends:
绕过该系统。在这种情况下,my_package
将在全局环境中寻找函数,如果有人应该在全局环境中定义一些名为 select()
的函数,my_package
将使用该函数,你会得到意想不到的结果结果。
示例 1:
DESCRIPTION
文件:
Imports:
dpylr
来自 my_package
的一些函数:
my_fun <- function(...) {
dplyr::mutate(...) %>%
dplyr::select(1:3)
}
例二:
DESCRIPTION
文件:
Imports:
dpylr
NAMESPACE
文件:
import(dplyr)
来自 my_package
的一些函数:
my_fun <- function(...) {
mutate(...) %>%
select(1:3)
}
示例 3:
DESCRIPTION
文件:
Imports:
dpylr
NAMESPACE
文件:
importFrom(dplyr,select)
来自 my_package
的一些函数:
my_fun <- function(...) {
dpylr::mutate(...) %>%
select(1:3)
}
您可以在网上找到有关如何处理 R 包中的依赖项的更详细说明。例如以下是有用的:
另外,NAMESPACE
文件也没有必要手写。您可以让 roxygen2
为您完成。阅读 documentation 了解更多信息。
我正在编写一个 R 包,它有几个其他包的依赖项,其中一些在 CRAN 中可用,其他一些是自制的。
根据帮助,library("my_package")
将在我之前安装包后加载包的名称空间,即 install.package("my_package")
.
然而,一旦我安装了包,我就可以通过 my_package::my_function()
使用已安装但未加载的包的所有功能,所以如果我的包有依赖项,除了将它们添加到 DESCRIPTION
] 文件:
Imports:
dplyr,
my_package2,
ggvis,
在包文件夹的根目录中。
我是否必须通过 library()
加载新包的依赖项,否则如果最终用户尚未在其计算机上安装,则最终用户会看到错误,因为 Imports[=25 中指定了所需的包=] 节?
不,用户不必加载 my_package
中函数使用的包。
您在 DESCRIPTION
文件中的 Imports:
下列出了一个包,这意味着在安装 my_package
期间,R 将检查您的系统上是否存在该包.这意味着 my_package
中的函数可以按照您的建议使用 ::
表示法使用这些包中的函数。
推荐使用 ::
表示法来引用其他包中的函数,但也有其他选项:
为了使
dplyr
中的所有函数无需my_package
中的::
即可访问,您可以将import(dplyr)
添加到NAMESPACE
文件。如果您使用一个包中的许多函数,这很方便。如果您只打算使用
dplyr
中的函数select
,您可以将importFrom(select, dplyr)
添加到NAMESPACE
文件中。您也可以将包添加到
Depends:
下的DESCRIPTION
文件中。这意味着当您使用library(my_package)
时,包将加载到全局环境中。这几乎不是一个好的解决方案。
依赖关系的一般想法是 R 是 my_package
将加载它所依赖的包的 "it's own version"。因此,您始终可以确定自己会,例如,使用 dplyr
包中的函数 select()
,如您所愿。例外是使用 Depends:
绕过该系统。在这种情况下,my_package
将在全局环境中寻找函数,如果有人应该在全局环境中定义一些名为 select()
的函数,my_package
将使用该函数,你会得到意想不到的结果结果。
示例 1:
DESCRIPTION
文件:
Imports:
dpylr
来自 my_package
的一些函数:
my_fun <- function(...) {
dplyr::mutate(...) %>%
dplyr::select(1:3)
}
例二:
DESCRIPTION
文件:
Imports:
dpylr
NAMESPACE
文件:
import(dplyr)
来自 my_package
的一些函数:
my_fun <- function(...) {
mutate(...) %>%
select(1:3)
}
示例 3:
DESCRIPTION
文件:
Imports:
dpylr
NAMESPACE
文件:
importFrom(dplyr,select)
来自 my_package
的一些函数:
my_fun <- function(...) {
dpylr::mutate(...) %>%
select(1:3)
}
您可以在网上找到有关如何处理 R 包中的依赖项的更详细说明。例如以下是有用的:
另外,NAMESPACE
文件也没有必要手写。您可以让 roxygen2
为您完成。阅读 documentation 了解更多信息。