I'm looking to create a generator function for a dummy reference class that would create empty objects of correct classes if arguments are not given.
Code
#' 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", ...)
Problem
SummaryData(data = mtcars, summary_columns = c("cyl", "mpg"), info = "Cars data")
Gives this error:
Error in missing(comment(info)) : invalid use of 'missing'
SummaryData(data = mtcars, summary_columns = c("cyl", "mpg"))
Error in missing(comment(info)) : invalid use of 'missing'
Desired results
The second call should create SummaryData object with empty info string.
Try using
missing("data")ordo.call(missing, list("data"))instead ofmissing(data). They both should work.However, you cannot use it with
comment(info), sincemissingonly accepts argument names, butcommentwill rather returnNULL. As long as the argument is supplied to a function call, it will not be missed, I guess. So, you'll need to check the argumentinfofirst and then do whatever you want.Hope this helps.