我试图通过调用构造函数中的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.这是一个玩具示例,但我试图了解如何使用初始化方法,可以进行所有其他初始化,然后检查它是否有效的。
答案 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)
。