小编Dan*_*nes的帖子

如何在R中继承S4类正确使用有效性函数

假设您有一个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

inheritance r s4

5
推荐指数
1
解决办法
978
查看次数

标签 统计

inheritance ×1

r ×1

s4 ×1