当前位置 : 主页 > 手机开发 > 其它 >

通过library()/ Description文件在R包中使用依赖项

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在写一个R包,它有几个其他包的依赖,其中一些在CRAN中可用,而其他包是自制的. 根据帮助,库(“my_package”)将在我之前安装它时加载包的名称空间,即install.package(“my_package”). 然而,一
我正在写一个R包,它有几个其他包的依赖,其中一些在CRAN中可用,而其他包是自制的.

根据帮助,库(“my_package”)将在我之前安装它时加载包的名称空间,即install.package(“my_package”).

然而,一旦我安装了软件包,我就可以通过my_package :: my_function()使用已安装但未加载的软件包的所有功能,所以如果我的软件包有依赖项,那么除了将它们添加到DESCRIPTION文件中之外:

Imports:
    dplyr,
    my_package2,
    ggvis,

在包文件夹的根目录中.
我是否必须通过library()加载新包的依赖项,否则最终用户如果未在其计算机上安装,则会看到错误,因为在Imports部分中指定了所需的包?

不,用户不必加载my_package中的函数使用的包.

您在Imports下列出了一个包的事实:在DESCRIPTION文件中意味着在安装my_package期间,R将检查您的系统上是否有此软件包可用.这意味着my_package中的函数可以使用:: notation来使用这些包中的函数,如您所建议的那样.

使用:: notation是从其他包引用函数的推荐方法,但也有其他选项:

>为了在my_package中使用dplyr可以访问所有函数而不使用::,可以将import(dplyr)添加到NAMESPACE文件中.如果您使用包中的许多功能,这很方便.
>如果您打算仅使用dplyr中的函数select,则可以将importFrom(select,dplyr)添加到NAMESPACE文件中.
>您还可以将包添加到Depends:下的DESCRIPTION文件中.这意味着当您使用库(my_package)时,包将加载到全局环境中.这几乎不是一个好的解决方案.

依赖关系的一般概念是R是my_package将具有它依赖于加载的包的“它自己的版本”.因此,您可以随时确保使用dplyr软件包中的函数select(),如您所愿.例外是使用Depends:绕过这个系统.在这种情况下,my_package将在全局环境中查找函数,如果有人在全局环境中定义了一些名为select()的函数,my_package将使用此函数,您将获得意外结果.

例1:

说明文件:

Imports:
    dpylr

my_package中的一些函数:

my_fun <- function(...) {
    dplyr::mutate(...) %>%
    dplyr::select(1:3)
}

例2:

说明文件:

Imports:
    dpylr

NAMESPACE文件:

import(dplyr)

my_package中的一些函数:

my_fun <- function(...) {
    mutate(...) %>%
    select(1:3)
}

例3:

说明文件:

Imports:
    dpylr

NAMESPACE文件:

importFrom(select, dplyr)

my_package中的一些函数:

my_fun <- function(...) {
    dpylr::mutate(...) %>%
    select(1:3)
}

您可以在Web上找到有关如何处理R包中的依赖关系的更详细说明.例如,以下内容非常有用:

> On the DESCRIPTION file
> On the NAMESPACE file

网友评论