gpt4 book ai didi

r - 使用 roxygen2 导入两个同名函数

转载 作者:行者123 更新时间:2023-12-02 13:29:52 25 4
gpt4 key购买 nike

我是 CRAN 包的维护者,在加载时收到以下消息:

* checking whether package ‘qdap’ can be installed ... [10s/10s] WARNING
Found the following significant warnings:
Warning: replacing previous import ‘annotate’ when loading ‘NLP’
Warning: replacing previous import ‘rescale’ when loading ‘scales’

因为我使用了plotrix和scales包以及NLP和ggplot包。它们具有共同的函数rescaleannotate。这会导致最新的 CRAN 检查出现严重警告。所以我决定“修复”它。

我的描述是这样的:

Package: qdap
Type: Package
Title: Bridging the gap between qualitative data and quantitative analysis
Version: 1.0.0
Date: 2013-06-26
Author: Tyler Rinker
Maintainer: Tyler Rinker <tyler.rinker@gmail.com>
Depends:
R (>= 3.0.0),
ggplot2 (>= 0.9.3.1),
gdata,
grid,
Imports:
NLP,
openNLP,
plotrix,
scales,
LazyData: TRUE
Description: Stuff
License: GPL-2

并将其添加到一些 .R 文件中:

#' @import ggplot2 gridExtra RColorBrewer
#' @importFrom scales alpha

但这会导致另一个警告:

* installing *source* package 'qdap' ...
** R
** data
*** moving datasets to lazyload DB
** inst
** preparing package for lazy loading
Warning: replacing previous import 'rescale' when loading 'scales'
Warning: replacing previous import 'annotate' when loading 'NLP'
Warning: replacing previous import 'alpha' when loading 'scales'

如何正确使用 roxygen2importFrom 标签?

我已阅读:https://github.com/hadley/devtools/wiki/Namespaces

但我从一个必须有人这样做的例子中学到了最好的东西。我不确定如何正确格式化说明文件以及如何使用 roxygen2 标签来避免:

* checking whether package ‘qdap’ can be installed ... [10s/10s] WARNING
Found the following significant warnings:
Warning: replacing previous import ‘annotate’ when loading ‘NLP’
Warning: replacing previous import ‘rescale’ when loading ‘scales’

这是qdap GitHub Repo

最佳答案

要记住的是,您不能拥有多个函数与您的包的命名空间中的名称相同。

假设有两个包,pkgA 和 pkgB,都导出一个函数称为 foo。如果您创建一个包 pkgC,它具有 import(pkgA) 和命名空间中的import(pkgB)。现在,当您调用 library(pkgC) 时,您将得到警告:

replacing previous import 'foo' when loading 'pkgB'. 

现在,假设有人创建了另一个包 pkgD,它在 NAMESPACE 文件中包含以下内容:

import(pkgA)
import(pkgB)
import(pkgC)

然后,library(pkgD) 将给出 2 个警告:

1: replacing previous import ‘foo’ when loading ‘pkgB’ 
2: replacing previous import ‘foo’ when loading ‘pkgB’

如果每个人都采用导入整个命名空间的做法,那么 30 年从现在开始,将会出现很多这样的警告。

相反,由于你的包中只能有一个“foo”,所以你应该显式导入您想要的包的“foo”(和其他函数)使用。在上面的示例中,pkgD 的命名空间应该是

importFrom(pkgB,foo)

如果您实际上需要使用两个不同包中具有相同名称的两个函数,您可以执行的一种技巧是从每个包中导入其他函数,以确保安装包并加载它们的命名空间,然后引用您需要使用 :: 表示法将其放入您的命名空间中的函数:

importFrom(pkgA,foo)
importFrom(pkgB,bar)

然后在代码中调用函数 pkgA::abc()pkgB::abc()

关于r - 使用 roxygen2 导入两个同名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18343235/

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