带有构造函数重载的S4类在roxygen2文档中有重复

时间:2017-05-04 00:35:51

标签: r devtools s4 roxygen2

我在R包里写了一个S4类。我使用roxygen2作为文档:

#' A timeframe class represents a start date, end date and frequency
#'
#' @slot start_date First date in the timespan
#' @slot end_date Last date in the timespan
#' @slot frequency 'D', 'W' or 'M' for daily, weekly or monthly
#' @export
#' @exportClass timeframe
timeframe <- setClass( "timeframe", slots = c(start_date = "Date", end_date = "Date", frequency = "character"),
    prototype = list(
        start_date = lubridate::as_date(lubridate::today() - 367),
        end_date = lubridate::as_date(lubridate::today() - 1),
        frequency = "D"
    ),
    validity = function(object) {
        # ...some validation stuff...
    }
)

稍后,我编写了一个重载函数来创建更好的用户界面:

#' @param start_date First date in the timespan
#' @param end_date Last date in the timespan
#' @param frequency 'D', 'W' or 'M' for daily, weekly or monthly
#' @export
timeframe <- function(start_date, end_date, frequency = "D") {
    # ...some validation steps, such as setting default dates if they're missing...
    return_object = new("timeframe", start_date = start_date, end_date = end_date, frequency = frequency)
    return(return_object)
}

我认为我需要记录这两件事,因此无论用户创建timeframe对象的方式如何,intellisense自动完成都将起作用。问题是文档加倍了一些东西: enter image description here 我做错了什么?我该如何解决?

1 个答案:

答案 0 :(得分:1)

R文档在每个名称上发生,而不是按方法或按重载级别进行。 (有关Rd文件的更多信息,请参阅here,这是Roxygen2生成的内容)。这意味着你不应该对具有相同名称的对象(无论是函数还是类)的文档加倍。

想象一下,这两个人有不同的内容,然后有人打字help(timeframe)。你期望两个文件中的哪一个出现? R如何知道差异?

只需定义一次@param定义(无关紧要)。自动完成将建议并描述其中的参数。