如何记录调用相同功能但具有不同参数的函数?

时间:2015-04-04 19:44:07

标签: r documentation package roxygen2

我正在编写一个包含其他几个导出函数的内部函数的包,但导出的函数都有不同的参数。

这是对我的意思的简化:

general <- function(...) {
  # do something based on which function was called
}
one <- general
two <- general

我知道它看起来很奇怪,但是general别名的所有函数都使用完全相同的代码,但它们有不同的参数。我可以致电one(id = "foo")two(class = "bar")

我的问题是如何以R CMD检查不会抱怨的方式用roxygen记录这些功能?

我想用适当的参数记录每个函数,所以这是我希望能够使用的:

general <- function(...) {
  # do something based on which function was called
}
#' @param id The id
#' @export
one <- general
#' @param class The class
#' @export
two <- general

但是当我查看我的包裹时,我会收到警告,例如

* checking Rd \usage sections ... WARNING
Undocumented arguments in documentation object 'one'
  '...'
Documented arguments not in \usage in documentation object 'one':
  'id'

two函数的类似警告。

我尝试手动编辑.Rd文件以更改

\usage{ one(...) }

\usage{ one(id) }

尝试修复此警告,但是当我运行检查时,它似乎再次创建文档并覆盖我的更改。

有解决方法吗?

谢谢

1 个答案:

答案 0 :(得分:4)

拥有实际上只是相同功能的别名的想法似乎令人困惑,并且没有办法生成在此安排中传递R CMD check的标准R文档。

更好的方法是将函数onetwo编写为general的包装器,它可以将参数传递给它,而不是作为别名。通过这种方式,您可以为它们提供实际参数,您可以使用标准Rd标记(或roxygen,如果这是您生成文档的方式)进行记录。从最终用户的角度来看,这将更加清晰,并且对于您作为开发人员来说设计应该不会更加困难。

编辑:根据您的评论,这可以如下工作:

general <- function(..., from) {
    if(from == "one") {
        # do stuff
    } else if (from == "two") {
        # do other stuff
    }
}

one <- function(...) {
    general(..., from = "one")
}

two <- function(...) {
    general(..., from = "two")
}

通过这种方式,您可以在不依赖match.call的情况下知道最初调用哪个函数,这看起来非常危险,并且仍然能够以某种方式记录函数onetwo已完成并通过R CMD check