是否可以在R中为S4对象定义动态构造函数?动态我的意思是:
firstClass <- setClass(Class = "firstClass",slots = c(Name = "character", ID = "numeric"))
现在我想定义一个智能的构造函数,即它检查函数调用提供的参数,并通过设置slot do default或者提供的参数来创建calss“firstClass”的对象。例如
firstClass <- function(Name, ID){
if(missing(Name) & missing(ID)){
return(new(Class = firstClass))
}
if(missing(Name) & !missing(ID)){
return(new(Class = firstClass,ID = ID))
}
if(!missing(Name) & missing(ID)){
return(new(Class,Name = Name))
}
if(!missing(Name) & !missing(ID)){
return(new(Class, Name = Name, ID = ID))
}
}
显然,也应该进行一些健全性检查。这个构造函数正是我想要的,取决于它构造一个对象的调用。但是,对于一个简单的类(几个插槽),这是可以的,但随着更多的插槽,复杂性增加。所以我想知道是否有一种优雅的方式来做到这一点。
答案 0 :(得分:1)
使用原型提供合理的默认值
.firstClass <-
setClass(Class = "firstClass",
representation = representation(
Name = "character",
ID = "integer"),
prototype=c(ID=0L))
在构造函数中使用默认值作为参数,并在必要时强制使用适当的类型
firstClass <- function(Name=character(), ID=0L)
.firstClass(Name=Name, ID=as.integer(ID))
(.firstClass
是new("firstClass", ...)
周围的一个轻量级包装器,对我而言,它在实现细节(调用new()构造一个类)和类构造的接口之间提供了一点分离。{{ 1}}是第二个更有用的层,以不需要知道底层类的方式向用户展示对象构造的必要参数。强制执行理智检查&#39;在有效性方法
firstClass()