S4の理解がちょっと深まった

色々漁っていたら、色々見つかってS4で長年よく分かっていなかったようなところが分かってきたような気がしているところ。

こないだ作った自分のパッケージのもS4風だとこんな感じで書けそう。

setClass( 
         Class="nw", 
         representation=representation( 
           Y = "numeric",
           X1 = "numeric",
           X2 = "numeric",
           h = "numeric"
           ) 
         ) 

setMethod(f= "plot", signature= "nw", 
          definition=function (x, y, ...){
            Y <- x@Y
            X1 <- x@X1
            X2 <- x@X2
            h <- x@h
            n <- 30
            s1 <- seq(min(X1),max(X1),length=n)
            s2 <- seq(min(X2),max(X2),length=n)
            h11 <- h[1];h12 <- h[2];h21 <- h[3];h22 <- h[4]
            persp(s1,s2,
                  Reduce("+",Map(function(f){
                    outer(s1,s2,f)
                  },mapply(function(X1,X2,Y){y.exp(X1,X2,Y,h11,h12,h21,h22)},X1,X2,Y))) /
                  Reduce("+",Map(function(f){
                    outer(s1,s2,f)
                  },mapply(function(X1,X2){epanechnikov.radial(X1,X2,h11,h12,h21,h22)},X1,X2))),
                  theta=320,phi=20,col=rainbow(50),ticktype="detailed",
                  xlab="x1",ylab="x2",zlab="y",...)
          } 
          ) 

plotの引数の

definition=function (x, y, ...){

の部分にちょっとつまづいたりなど。自分で勝手に設定しようとすると怒られたりするという感じ。あとはこれをパッケージに組み込んでやる方法とかを調べればどうにか形になってくるな。