gpt4 book ai didi

r - 通过 library()/描述文件使用 R 包中的依赖项

转载 作者:行者123 更新时间:2023-12-04 10:11:34 28 4
gpt4 key购买 nike

我正在编写一个 R 包,它具有其他包的几个依赖项,其中一些在 CRAN 中可用,而其他一些是自制的。

根据帮助,library("my_package")一旦我之前安装了它,就会加载包的命名空间,即 install.package("my_package") .

尽管如此,一旦我安装了该软件包,我就可以通过 my_package::my_function() 使用已安装但未加载的软件包的所有功能。 ,所以如果我的包有依赖项,除了将它们添加到 DESCRIPTION文件:

Imports:
dplyr,
my_package2,
ggvis,

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

最佳答案

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

您在 Imports: 下列出了一个包的事实在 DESCRIPTION文件表示在my_package安装过程中, R 将检查该软件包是否在您的系统上可用。这意味着在 my_package 中起作用可以使用 :: 使用这些包中的函数符号,正如你所建议的。

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

  • 为了使所有功能来自 dplyr无需 :: 即可访问在 my_package ,您可以添加 import(dplyr)NAMESPACE文件。如果您使用包中的许多功能,这很方便。
  • 如果您只想使用函数 select来自 dplyr ,您可以添加 importFrom(select, dplyr)NAMESPACE文件。
  • 您还可以将软件包添加到 DESCRIPTION文件下 Depends: .这意味着当您使用 library(my_package) 时,包已加载到全局环境中。 .这几乎从来都不是一个好的解决方案。

  • 依赖关系的一般思想是 R 是 my_package将拥有它所依赖的软件包的“它自己的版本”。因此,您始终可以确保您将使用函数 select()。来自 dplyr包,正如你打算做的那样。异常(exception)是使用 Depends:绕过这个系统。在这种情况下, my_package将在全局环境中寻找函数,如果有人应该定义一些名为 select() 的函数在全局环境中, my_package将使用此功能,您将获得意想不到的结果。

    示例 1:
    DESCRIPTION文件:
    Imports:
    dpylr

    来自 my_package 的一些函数:
    my_fun <- function(...) {
    dplyr::mutate(...) %>%
    dplyr::select(1:3)
    }

    示例 2:
    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)
    }

    您可以在 Web 上找到有关如何处理 R 包中的依赖项的更多详细说明。例如,以下是有用的:
  • On the DESCRIPTION file
  • On the NAMESPACE file

  • 另外,没有必要写 NAMESPACE手动归档。您可以让 roxygen2为你做那个。阅读 documentation想要查询更多的信息。

    关于r - 通过 library()/描述文件使用 R 包中的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34880161/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com