S4构造函数初始化和原型
S4 constructor initialize and prototype
我正在尝试通过调用构造函数中的有效性方法来构建 S4 对象。
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
})
这段代码有问题,因为我得到
new("Person", Age = 12)
#Error in if (object@Age < 0) return("Age cannot be negative") :
#argument is of length zero
当然,我希望年龄等于 12。这是一个玩具示例,但我试图了解如何拥有一个初始化方法,该方法可能会执行所有其他初始化,然后检查有效。
根据 ?initialize
帮助页面上的示例,您需要实际初始化对象,否则 none 个插槽将被填充。否则那些 ...
只会吞噬参数而不对它们做任何事情。您可以使用 callNextMethod
调用默认初始化
setMethod("initialize", "Person", function(.Object, ...) {
.Object <- callNextMethod()
validObject(.Object)
.Object
})
setClass
实际上为您做了很多这样的工作。如果您修改第一行以捕获 return:
setClass("Person", slot = c(Age = "numeric")) -> Person
然后你可以用
实例化对象
Person(Age=12)
.
我正在尝试通过调用构造函数中的有效性方法来构建 S4 对象。
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
})
这段代码有问题,因为我得到
new("Person", Age = 12)
#Error in if (object@Age < 0) return("Age cannot be negative") :
#argument is of length zero
当然,我希望年龄等于 12。这是一个玩具示例,但我试图了解如何拥有一个初始化方法,该方法可能会执行所有其他初始化,然后检查有效。
根据 ?initialize
帮助页面上的示例,您需要实际初始化对象,否则 none 个插槽将被填充。否则那些 ...
只会吞噬参数而不对它们做任何事情。您可以使用 callNextMethod
setMethod("initialize", "Person", function(.Object, ...) {
.Object <- callNextMethod()
validObject(.Object)
.Object
})
setClass
实际上为您做了很多这样的工作。如果您修改第一行以捕获 return:
setClass("Person", slot = c(Age = "numeric")) -> Person
然后你可以用
实例化对象Person(Age=12)
.