在参考类的初始化方法中使用失踪

时间:2018-12-11 17:55:06

标签: r arguments reference-class

我正在寻找一个用于虚拟引用类的生成器函数,如果不提供参数,它将创建正确类的空对象。

代码

#' Class SummaryData
#'
#' @description Odd class facilitating creation of data frame with
#'   summary information attached.
#'
#' @slot data data.frame.
#' @slot summary_columns character.
#' @slot info character.
#'
#' @return A SummaryData Class
#' @import methods
#' @exportClass SummaryData
#'
setClass(
    Class = "SummaryData",
    slots = list(
        data = "data.frame",
        summary_columns = "character",
        info = "character"
    )
)

#' Constructor method of SummaryData.
#'
#' @name SummaryData
#' @rdname SummaryData-class
setMethod("initialize", "SummaryData", function(.Object,
                                           data = "data.frame",
                                           summary_columns = "character",
                                           info = "character",
                                           ...)
{
    if (missing(data)) {
        data <- data.frame()
    }
    if (missing(summary_columns)) {
        summary_columns <- character()
    }
    if (missing(comment(info))) {
        info <- character()
    }

    validObject(.Object)
    return(.Object)
})

#' Wrapper function SummaryData.
#'
#' @name SummaryData
#' @rdname SummaryData-class
#' @export
SummaryData <- function(...) new("SummaryData", ...)

问题

SummaryData(data = mtcars, summary_columns = c("cyl", "mpg"), info = "Cars data")

给出此错误:

  

缺少(comment(info))错误:无效使用'missing'
   SummaryData(数据= mtcars,summary_columns = c(“ cyl”,“ mpg”))
   缺少错误(comment(info)):无效使用'missing'

所需结果

第二个调用应使用空的SummaryData字符串创建info对象。

1 个答案:

答案 0 :(得分:1)

尝试使用missing("data")do.call(missing, list("data"))代替missing(data)。他们俩都应该工作。

但是,您不能将其与comment(info)一起使用,因为missing仅接受参数名称,但是comment宁愿返回NULL。我想,只要将参数提供给函数调用,就不会丢失它。因此,您需要先检查参数info,然后再执行所需的操作。


希望这会有所帮助。