使用roxygen2导入两个同名函数

使用roxygen2导入两个同名函数,r,package,roxygen2,R,Package,Roxygen2,我是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 ‘res

我是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软件包。它们具有相同的功能
重新缩放
注释
。这将导致最新的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
但这导致了另一个警告:

* 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'
如何正确使用roxygen2的导入标签

我读过:

但我从一个必须有人这样做的例子中学到了最好的东西。我不确定如何正确格式化描述文件以及如何使用
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’

这里有一个

需要记住的是,您不能使用多个函数 在包的命名空间中使用相同的名称

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

replacing previous import 'foo' when loading 'pkgB'. 
现在,假设有人创建了另一个包pkgD,该包的名称空间文件中包含以下内容:

import(pkgA)
import(pkgB)
import(pkgC)
然后,
库(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()

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

因此,roxygen2的标记@importFrom的正确用法是:
@importFrom package\u name function\u name
。没有逗号,括号,什么都没有,只有两个名称用空格隔开(很明显,可能适用于多个函数)

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


希望能有帮助。

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

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"
ls(“包:数据表”)%>%
setdiff(c(“最后一个”、“第一个”、“介于”和“:=”))%>%
str_c(collapse=”“)

## "%在%%chin%%flike%%ilike%%inrange%%like%地址alloc.col as.data.table as.Date.IDate as.IDate as.itate as.ITime as.xts.data.table chgroup chmatch chorder CJ copy cube data.table dcast dcast dcast.data.table fcoaless fidelse fintersect foverlaps frank frankv fread frollapply frollmean frollsum fsetdiff fsetequal fsort funion fwrite getDTthreads之间getNumericRounding groupingsets在Range is.data.table isoweek中具有关键小时IDateTime索引,但仍在导入这两个包。没有特定于函数的方法来导入包。只需查看您的名称空间文件-您仍然有所有包的导入。@Tylerlinker:欢迎加入“GSee”俱乐部。;-)仅供参考,roxygen3拥有
@autoImports
,它主要自动确定要导入哪些函数。@Tylerlinker,但这会引起人们对这个问题的注意,并让人们有更多机会表达他们对我的仇恨。。)@hadley是roxygen3和
@autoImports
不再在管道中?我在repo上看到“Roxygen开发活动已转移到roxygen2”。如果您将两个分别具有函数
foo
的包导入到您的包中,您不能使用
语法来区分这两个包吗?例如
pkgA::foo()
pkgB::foo()
?(使用
importFrom
应该可以大大减少这样做的机会)@geneorama您可以使用
pkgA::foo()
pkgA
访问
foo
,但它不会将其导入包的命名空间。包的命名空间不能有多个同名函数。我在包中同时使用了
gWidgets::gtable
gtable::gtable
,这会给我一个警告。对如何解决这个问题有什么建议吗?
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"