Roxygen 认为我的功能是 S3 方法,因此在安装我的包时中断

标签 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 标签。但是,当我尝试安装我的软件包时,它失败了:

...
* 安装帮助索引
** 构建包索引
** 测试是否可以加载已安装的包
错误:加载命名空间“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)
}

如果我确实将名称更改为extractSigMetadata,则问题在技术上已解决,并且.Rd 代码更改,
\usage{
 extractSigMetadata(foo)
}

但是我真的很想不必更改我的函数名称(我的包中有数十个具有相同问题的函数,并且它们被用于一堆脚本中 - 更改我的命名将是一个巨大的痛苦架构不是)。

---> 有谁知道我如何告诉 roxygen 这只是一个正常的函数而不是奇怪的 s3 方法?我猜它与@method 标签有关,但我不知道如何正确使用它来完成这项工作。谢谢!!!

最佳答案

修复!

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

希望这可以帮助将来遇到相同问题的任何人。谢谢!

附言Hadley 提出了更好的命名实践,我将在 future 尝试遵循。

关于Roxygen 认为我的功能是 S3 方法,因此在安装我的包时中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24441603/

相关文章:

java - 如何在Java中显示小数点前没有前导零的 double

javascript - 如何向内置 String 对象添加 getter 方法?

r - 创建一个依赖于 GitHub 上另一个 R 包的 R 包

regexp - 以任意顺序查找字符串中的数字

r - 将 vector1 中的每个元素与 vector2 中的每个元素进行比较的矩阵

java - 为什么方法在声明之前在 Java 中可用?

linux - 如何将所有 R 包从 super 用户重新安装到用户?

r - 如何编写嵌套的 IF 和 RAND excel 语句

r - 如何更改 slider 输入值的大小shinydashboard

go - 在 golang 中包装一个包