首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用roxygen2导入两个同名函数

使用roxygen2导入两个同名函数
EN

Stack Overflow用户
提问于 2013-08-20 19:13:29
回答 3查看 5.9K关注 0票数 27

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

代码语言:javascript
复制
* 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和缩放包,以及NLP和ggplot包。它们具有共同的功能rescaleannotate。这将对最新的CRAN检查产生重大警告。所以我决定“修复”它。

我做了这样的描述:

代码语言:javascript
复制
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文件中:

代码语言:javascript
复制
#' @import ggplot2 gridExtra RColorBrewer
#' @importFrom scales alpha

但这导致了另一个警告:

代码语言:javascript
复制
* 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标记来避免:

代码语言:javascript
复制
* 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回购

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-23 13:01:32

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

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

代码语言:javascript
复制
replacing previous import 'foo' when loading 'pkgB'. 

现在,假设有人创建了另一个包pkgD,该包在命名空间文件中具有如下内容:

代码语言:javascript
复制
import(pkgA)
import(pkgB)
import(pkgC)

然后,library(pkgD)将发出两个警告:

代码语言:javascript
复制
1: replacing previous import ‘foo’ when loading ‘pkgB’ 
2: replacing previous import ‘foo’ when loading ‘pkgB’ 

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

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

代码语言:javascript
复制
importFrom(pkgB,foo)

如果您实际上需要从两个不同的包中使用同名的两个函数,您可以执行的一种方法是从每个包中导入其他函数,以确保安装了包并加载了它们的命名空间,但通过将其放置在您的命名空间中,然后使用::符号引用所需的函数:

代码语言:javascript
复制
importFrom(pkgA,foo)
importFrom(pkgB,bar)

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

票数 24
EN

Stack Overflow用户

发布于 2016-08-17 16:12:19

很可能对你不再有用,但可能对其他人有用:你的问题的答案可以在你提到的网站上找到,特别是在这里(引用来源):“不管你用了多少次@importFrom foo bar”。

因此,正确使用roxygen2 2的标签@importFrom是:@importFrom package_name function_name。没有逗号,括号,没什么,只有两个名字用空格隔开(很明显,可能适用于多个函数)。

我刚才在为我的一个包的新版本生成文档时也尝试过这一点,所以它应该可以工作。

希望能帮上忙。

票数 4
EN

Stack Overflow用户

发布于 2019-12-06 13:29:08

最近我找到了解决这个问题的新方法。我想在开发中导入dplyr和data.table,它提供了这些警告。为了删除重叠函数,我使用importFrom导入除了重叠之外的data.table中的每个函数。

代码语言:javascript
复制
ls("package:data.table") %>% 
  setdiff(c("last","first","between",":=")) %>% 
  str_c(collapse = " ")

## "%between% %chin% %flike% %ilike% %inrange% %like% address alloc.col as.data.table as.Date.IDate as.IDate as.ITime as.xts.data.table chgroup chmatch chorder CJ copy cube data.table dcast dcast.data.table fcoalesce fifelse fintersect foverlaps frank frankv fread frollapply frollmean frollsum fsetdiff fsetequal fsort funion fwrite getDTthreads getNumericRounding groupingsets haskey hour IDateTime indices inrange is.data.table isoweek key key<- key2 like mday melt melt.data.table merge.data.table minute month nafill quarter rbindlist rleid rleidv rollup rowid rowidv second set set2key set2keyv setalloccol setattr setcolorder setDF setDT setDTthreads setindex setindexv setkey setkeyv setnafill setnames setNumericRounding setorder setorderv shift shouldPrint SJ tables test.data.table timetaken transpose truelength tstrsplit uniqueN update.dev.pkg wday week yday year"

setdiff包含了所有冲突的函数名。最后,我只对上面的函数进行importFrom data.table。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18343235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档