我正在编写一个包含其他几个导出函数的内部函数的包,但导出的函数都有不同的参数。
这是对我的意思的简化:
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) }
尝试修复此警告,但是当我运行检查时,它似乎再次创建文档并覆盖我的更改。
有解决方法吗?
谢谢
答案 0 :(得分:4)
拥有实际上只是相同功能的别名的想法似乎令人困惑,并且没有办法生成在此安排中传递R CMD check
的标准R文档。
更好的方法是将函数one
和two
编写为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
的情况下知道最初调用哪个函数,这看起来非常危险,并且仍然能够以某种方式记录函数one
和two
已完成并通过R CMD check
。