Roxygen认为我的函数是一种S3方法,因此在安装我的软件包时会中断

时间:2014-06-26 23:07:25

标签: r methods package roxygen

我使用roxygen创建自己的包。我有一个导致问题的功能:

##' extract.sig.metadata
##' @param foo bar
##' @author me
##' @export
extract.sig.metadata <- function(foo){
# does stuff
}

我已经创建了我的包骨架(使用devtools的create(my-package)),并且我已经使用document()来处理roxygen标签。但是,当我尝试安装我的软件包时,它会失败:

... * 安装帮助索引 **建立包装指数 **测试是否可以加载已安装的软件包 错误:对象&#39;提取&#39;在加载命名空间时找不到&#39; my-package&#39; 错误:加载失败 执行暂停

我很确定roxygen认为extract.sig.metadata是一种S3方法,即一种特殊形式的export(),但它没有找到函数export(),所以它& #39;破碎。但这不是一个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)
}

如果我确实将名称更改为extractSigMetadata,则问题在技术上已得到修复,而.Rd代码也会更改,

\usage{
 extractSigMetadata(foo)
}

但我真的不想更改我的函数名称(我的包中有几十个函数有相同的问题,并且它们被用在一堆脚本中 - 这将是一个巨大的痛苦不改变我的命名模式)。

---&GT;有谁知道我怎么能告诉roxygen这只是一个正常的功能而不是奇怪的s3方法?我猜测它与@method标签有关,但我不知道如何正确使用它以使其工作。感谢!!!

1 个答案:

答案 0 :(得分:7)

修正了它!

使用@export extract.sig.metadata代替@export显然告诉roxygen extract.sig.metadata是整个函数名,这解决了这个问题。在这种特殊情况下,我没有通用的提取函数,但R.utils(我的包不依赖但仍加载的包)确实有一个提取函数。

希望这有助于将来遇到同样问题的任何人。谢谢!

P.S。哈德利建议更好的命名实践,我将在未来尝试这样做。