在构建包时导入包的所有功能,除了一个

import all the functions of a package except one when building a package

我正在构建一个导入 data.table 的 R 包 (mypackage) 和另一个包(我们称之为 myotherpackage ).

Imports: data.table, myotherpackagemypackage 的描述文件中。

myotherpackage 导入 dplyr,它有几个函数命名为 data.table 函数,所以我每次加载 mypackage[= 时都会收到这样的警告27=]:

Warning: replacing previous import ‘data.table::first’ by ‘dplyr::first’ when loading ‘mypackage’

有没有办法导入 data.table 除了 "first" 之外的所有功能?如果我需要使用它,我会在代码中使用 data.table::first 。 或者有更好的方法来处理它吗?每次有人导入包时,我都试图避免警告。谢谢!

这里的 NAMESPACE 文件有些灵活,如 Writing R Extensions 中所述。

两个主要的导入指令是:

import(PACKAGE)

它将命名空间中的所有对象导入到您的包中。第二种选择是使用以下方式进行特定导入:

importFrom(PACKAGE, foo)

这使您可以访问 foo() 而无需完全限定的引用 PACKAGE::foo().

但这不是仅有的两个选项。您还可以使用 except 参数来排除少量导入:

import(PACKAGE, except=c(foo,bar))

它为您提供了 PACKAGE 命名空间中的所有内容,但 foo()bar()。这对于避免冲突很有用 - 就像你的情况一样。

对于 roxygen,发现你可以做到这一点很重要:

#' @rawNamespace import(PACKAGE, except = foo)

通过 roxygen 传递原始 NAMESPACE 指令。