我是R的新手,甚至是S4类的新手,并且在有效性检查方面遇到了一些问题。简单地说,它不起作用。这是我的代码:
check_filter_type <- function(object) {
length_filter_type <- length(object@filter_type)
#return("No filter type was specified.")
if (length_filter_type == 0L) {
return("No filter type was specified.")
}
possible_filter <- c('cutData', 'generateTimestamps',
'loadRawData', 'insertEventEntry',
'insertTimestampOffsetEntry',
'insertOffsetCorrectedEventEntry')
if(!(object@filter_type %in% possible_filter)) {
return("An unknown filter type was requested.")
}
return(TRUE)
}
setClass(
"filterPreProcessing",
representation(filter_type = "character"),
validity=check_filter_type
)
无论我传递给filter_type的哪个字符参数,都会创建类,尽管它不应该在我的有效性函数中定义。
filter <- new("filterPreProcessing", filter_type="")
validObject(filter)
#[1] TRUE
filter <- new("filterPreProcessing", filter_type="unknown")
validObject(filter)
#[1] TRUE
我很确定我误解了它应该如何工作,但在查看了一些教程和示例后,我无法确定我的错误。
答案 0 :(得分:0)
我相信你需要为你的课写初始化通用。如果您决定编辑插槽,它不会对该课程进行警告(见下文)。
setMethod('initialize', 'filterPreProcessing',
function(.Object, filter_type) {
.Object@filter_type <- filter_type
validObject(.Object)
return(.Object)
})
您应该编写一个通用名称来访问和编辑班级中的插槽。
setGeneric('filter_type', function(object) standardGeneric('filter_type'))
setMethod('filter_type', 'filterPreProcessing', function(object) {
return(object@filter_type)
})
setGeneric('filter_type<-', function(object) standardGeneric('filter_type<-'))
setMethod('filter_type<-', 'filterPreProcessing',
function(object, new_filter_type) {
object@filter_type <- new_filter_type
validObject(object)
return(object)
})
带上一粒盐。其他人应该出现并给出更好的答案。