色々漁っていたら、色々見つかってS4で長年よく分かっていなかったようなところが分かってきたような気がしているところ。
- http://www.omegahat.org/OOP
- OOPってそのまんますぐるwwwとか思ったらしっかり書いてあってめちゃくちゃ参考になる
- A (Not So) Short Introduction to 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, ...){
の部分にちょっとつまづいたりなど。自分で勝手に設定しようとすると怒られたりするという感じ。あとはこれをパッケージに組み込んでやる方法とかを調べればどうにか形になってくるな。