【发布时间】:2015-05-02 09:25:39
【问题描述】:
是否可以在 R 中为 S4 对象定义动态构造函数?我所说的动态是指:
firstClass <- setClass(Class = "firstClass",slots = c(Name = "character", ID = "numeric"))
现在我想定义一个智能的构造函数,即它检查函数调用提供了哪些参数,并通过将插槽设置为默认值或提供的参数来创建一个名为“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))
}
}
显然,还应该进行一些健全性检查。这个构造函数完全符合我的要求,具体取决于它构造对象的调用。然而,对于一个简单的类(很少的插槽),这是可以的,但是随着插槽的增加,复杂性会增加。所以我想知道是否有一种优雅的方式来做到这一点。
【问题讨论】:
-
您是否尝试过使用不同的编号运行默认的
firstClass()。论据?它已经做了你想做的事。