我正在使用roxygen创建自己的包.我有一个导致问题的功能:
##' extract.sig.metadata
##' @param foo bar
##' @author me
##' @export
extract.sig.metadata <- function(foo){
# does stuff
}
Run Code Online (Sandbox Code Playgroud)
我已经创建了我的包骨架(使用devtools的create(my-package)),并且我使用了document()来处理roxygen标签.但是,当我尝试安装我的软件包时,它会失败:
... *安装帮助索引**构建软件包索引**测试是否可以加载已安装的软件包错误:加载命名空间'my-package'时找不到对象'extract'错误:加载失败执行停止
我很确定roxygen认为extract.sig.metadata是一个S3方法,即一种特殊形式的export(),但它没有找到函数export(),所以它正在破坏.但这不是一个s3方法,它只是一个名为extract.sig.metadata的函数.如果我查看Rd代码,/ usage标记看起来很奇怪:
\usage{
\method{extract}{sig.metadata}(spec.df, var = "product_name",
ratio.cutoff = 0.001, prob.modifer = 3, frequency.cutoff = NA,
verbose = F, assign.to.global.env = FALSE, use.bigrams = T, clean = T,
ngram.dupe.n.cutoff = 0.1, max.obs = 10000)
}
Run Code Online (Sandbox Code Playgroud)
如果我确实将名称更改为extractSigMetadata,则问题在技术上已得到修复,并且.Rd代码会更改,
\usage{
extractSigMetadata(foo)
}
Run Code Online (Sandbox Code Playgroud)
但我真的不想改变我的函数的名称(我的包中有几十个函数有相同的问题,并且它们被用在一堆脚本中 - 改变我的命名将是一个巨大的痛苦架构不).
--->有谁知道我怎么能告诉roxygen这只是一个正常的函数而不是奇怪的s3方法?我猜它与@method标签有关,但我不知道如何正确使用它来使这项工作.谢谢!!!
我试图在一个包中使用S3方法,并认为我在这里问一个问题之后理解了如何设置它:使用Roxygen构建R包时的S3方法一致性警告
但现在我得到的结果我没想到.如果我直接在R中运行下面的代码,它会给我预期的结果,但是如果我把它编译成一个包,我就得不到正确的结果(请注意,当它应该只采用唯一的单词时,它会被计算两次vector a
).我不确定我的设置是不正确的.
.R文件:
#' Find Common Words Between Groups
#'
#' Find common words between grouping variables (e.g. people).
#'
#' @param word.list A list of names chacter vectors.
#' @param overlap Minimum/exact amount of overlap.
#' @param equal.or A character vector of c(\code{"equal"}, \code{"greater"},
#' \code{"more"}, \code{"less"}).
#' @param \dots In liu of word.list the user may input n number of character
#' vectors.
#' @rdname common
#' @return Returns a dataframe of all words …
Run Code Online (Sandbox Code Playgroud)