Dear John and Seth, dear R-devels, once again the question of method dispatch in S4 -- this time with setClassUnion(); taking up your advice in
https://stat.ethz.ch/pipermail/r-devel/2006-April/037200.html https://stat.ethz.ch/pipermail/r-devel/2006-April/037201.html I have been too quick in stating that >setClassUnion()---at least in my case---solves the problem; > The problem arises if I have a direct superclass "competing" with the new class generated by setClassUnion(); consider the following code: ## C00 mother class to C01 and C02 setClass("C00", representation(a="numeric"), prototype =c(a=0)) setClass("C01", representation(a="numeric",b="numeric"), contains= "C00") setClass("C02", representation(a="numeric",d="numeric"), contains= "C00") #with setClassUnion: setClassUnion("C01OrC02", c("C01","C02")) # "+" methods for C00 and C01OrC02 # that this is a function to be dispatched on two arguments is # not important for this example setMethod("+", signature=c("C00","C00"), function(e1,e2)[EMAIL PROTECTED]@a}) setMethod("+", signature=c("C01OrC02","C01OrC02"), function(e1,e2){if(is(e1,"C01")) e10 <- e1 # else: explicit coercion from C02 to C01 else e10 <- new("C01", [EMAIL PROTECTED], [EMAIL PROTECTED]) if(is(e2,"C01")) e20 <- e2 # else: explicit coercion from C02 to C01 else e20 <- new("C01", [EMAIL PROTECTED], [EMAIL PROTECTED]) [EMAIL PROTECTED]@b}) x1=new("C02", a=1, d=2) x2=new("C02", a=1, d=3) x1+x2 ## 2, i.e. uses C00-method # but I would like to force usage of C01OrC02-method Here the two classes C00 and C01OrC02 are direct superclasses to C02, which exactly reflects my application of distribution classes, confer https://stat.ethz.ch/pipermail/r-devel/2006-April/037190.html How does the dispatching mechanism decide between these two and is there a way to change precedence? Of course, I could implement a "+" method for C02 directly in this case, but suppose I have much more methods for C01 and I want to use /all/ of them for C02, and cannot organize things so that we have the inheritance chain C00 -> C01 -> C02. What is the preferred way of doing this? Thank you already for your attention, Peter ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel