在引用的初始化方法中使用缺失 class
Using missing within initialize method of a reference class
我想为虚拟引用创建一个生成器函数 class,如果没有给出参数,它将创建正确 classes 的空对象。
代码
#' 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")
出现此错误:
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'
想要的结果
第二个调用应该创建 SummaryData
具有空 info
字符串的对象。
尝试使用 missing("data")
或 do.call(missing, list("data"))
而不是 missing(data)
。他们都应该工作。
但是,您不能将它与 comment(info)
一起使用,因为 missing
只接受参数名称,而 comment
更愿意 return NULL
。我猜,只要将参数提供给函数调用,就不会遗漏。所以,你需要先检查参数 info
然后再做任何你想做的事。
希望这有帮助。
我想为虚拟引用创建一个生成器函数 class,如果没有给出参数,它将创建正确 classes 的空对象。
代码
#' 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")
出现此错误:
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'
想要的结果
第二个调用应该创建 SummaryData
具有空 info
字符串的对象。
尝试使用 missing("data")
或 do.call(missing, list("data"))
而不是 missing(data)
。他们都应该工作。
但是,您不能将它与 comment(info)
一起使用,因为 missing
只接受参数名称,而 comment
更愿意 return NULL
。我猜,只要将参数提供给函数调用,就不会遗漏。所以,你需要先检查参数 info
然后再做任何你想做的事。
希望这有帮助。