假设您有一个S4类"A",以及一个具有附加功能的子类"B".每个都有自己的有效性检查 - B应该只检查其他功能.现在在B的初始化中,我想从A类的对象开始,然后用附加功能修改它.然而,这会产生问题,我猜我在这个例子中违反了R的假设.
这是虚拟代码:
setClass(Class="A",
representation=
representation(x="numeric"),
validity=
function(object){stopifnot(x > 0)})
setMethod("initialize",
signature(.Object="A"),
function(.Object,
...,
z){
x <- get("z") + 1
callNextMethod(.Object,
...,
x=x)
})
setClass(Class="B",
contains="A",
representation=
representation(y="numeric"),
validity=
function(object){stopifnot(y > 0)})
setMethod("initialize",
signature(.Object="B"),
function(.Object,
...,
bla){
.Object <- callNextMethod(.Object,
...)
.Object@y <- .Object@x + bla
return(.Object)
})
test <- new("B",
z=4,
bla=5)
Run Code Online (Sandbox Code Playgroud)
如果我尝试创建"测试"对象,我得到:
Error in stopifnot(x > 0): object 'x' not found
Run Code Online (Sandbox Code Playgroud)
你知道我怎么能做得更好吗?
非常感谢提前!最好的问候Daniel