【问题标题】:How to document functions that call the same function but have different parameters?如何记录调用相同函数但具有不同参数的函数?
【发布时间】:2015-06-09 15:18:05
【问题描述】:

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

这里是我的意思的简化:

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

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

我的问题是我如何使用 roxygen 以 R CMD check 不会抱怨的方式记录这些函数?

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

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) }

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

有解决办法吗?

谢谢

【问题讨论】:

    标签: r documentation package roxygen2


    【解决方案1】:

    拥有实际上都是同一个函数的别名的想法似乎令人困惑,并且在这种安排中没有办法生成通过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就知道最初调用了哪个函数,这看起来真的很危险,并且仍然能够以完整并通过@987654329的方式记录函数onetwo @。

    【讨论】:

    • 谢谢。我确实尝试过制作简单调用general 的导出函数包装器,但随后我丢失了被调用的原始函数的信息。在general 内部,我使用match.call()[1] 来了解最初调用了什么函数,但如果我使用包装器,它将无法工作。我知道这似乎令人困惑且不理想,但我真的认为这是我的应用程序的最佳和最简单的方法。我希望你不会说“没有办法”,这是我最大的恐惧 :)
    • @daattali 请查看我的编辑以获取更多建议。
    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    相关资源
    最近更新 更多