根据帮助,库(“my_package”)将在我之前安装它时加载包的名称空间,即install.package(“my_package”).
然而,一旦我安装了软件包,我就可以通过my_package :: my_function()使用已安装但未加载的软件包的所有功能,所以如果我的软件包有依赖项,那么除了将它们添加到DESCRIPTION文件中之外:
Imports: dplyr, my_package2, ggvis,
在包文件夹的根目录中.
我是否必须通过library()加载新包的依赖项,否则最终用户如果未在其计算机上安装,则会看到错误,因为在Imports部分中指定了所需的包?
您在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