S4构造函数初始化和原型

时间:2016-10-13 15:17:52

标签: r validation constructor s4

我试图通过调用构造函数中的validity方法来构建一个S4对象。

<target name="console" xsi:type="Console" detectConsoleAvailable="false"/>

此代码存在问题,因为我得到了

setClass("Person", slot = c(Age = "numeric"))

validityPerson<-function(object){
    if(object@Age < 0)return("Age cannot be negative")
TRUE
}
setValidity("Person", validityPerson)
setMethod("initialize","Person", function(.Object,...){
validObject(.Object)
.Object
})

当然我希望Age等于12.这是一个玩具示例,但我试图了解如何使用初始化方法,可以进行所有其他初始化,然后检查它是否有效的。

2 个答案:

答案 0 :(得分:2)

?initialize帮助页面上的示例中,您需要实际初始化对象,否则将不会填充任何插槽。否则那些...只是吞噬参数而不对它们做任何事情。您可以使用callNextMethod

调用默认初始化
setMethod("initialize", "Person", function(.Object, ...) {
    .Object <- callNextMethod()
    validObject(.Object)
    .Object
})

答案 1 :(得分:1)

setClass实际上为你做了很多这项工作。如果您修改第一行以捕获回报:

setClass("Person", slot = c(Age = "numeric")) -> Person

然后您可以使用

实例化对象

Person(Age=12)