Hi,
If it's the only reason why you think you have to use S4 then take a look at ?missing.
If you are interested in S4:
The first version gives an overview of setMethods. Then I give a simpler example. And finally a pure ?missing solution.


A) Declare function repmat as generic
if(!isGeneric("repmat"))
setGeneric("repmat"
          ,function(obx,oby,obz,...)
          standardGeneric("repmat"))

#B = repmat(A, m, n)

setMethod("repmat",signature(obx="numeric",oby="numeric",obz="numeric")
   ,function(obx,oby,obz){print("thre arg call")
   })

#B = repmat(A, [m n])
#B = repmat(A, n)

setMethod("repmat",signature(obx="numeric",oby="numeric",obz="missing")
   ,function(obx,oby)
   {
      print("two arg")
   #handle the difference in oby.
       if(length(oby)==1)
        oby
      else
        obx
   })

##END A ###
#simpler

#if(!isGeneric("repmat")) #commented out because you have already declared it.
setGeneric("repmat"
          ,function(object,...)
          standardGeneric("repmat"))

setMethod("repmat",signature(object="numeric")
,function(object,oby,obz)
{
        #using ?missing handle the differences.
        if(missing(obz))
        print("new version")
})

Note that you can have the same in S3 using ?missing
something like this.

repmat <- function(A, m, n) {
        if(missing(n)
        {
                if(length(m)==2)
                        {       
                                repmat1(A, m[1], m[2])
                        }
                else
                kronecker(matrix(1, m, m), A)   
        }
        kronecker(matrix(1, n, m), A)}
}
/E



Paul Roebuck wrote:

I'm translating some Matlab code and need some help figuring
out how to change this call into an S4 generic method.

In matlab, there's a function called 'repmat' with three
calling sequences (all I have to deal with anyway):
   1) B = repmat(A, m, n)
   2) B = repmat(A, [m n])
   3) B = repmat(A, n)
In all cases, A is the fill value, m is number of rows,
and n is number of columns.

As separate functions, the translations would roughly be:

repmat1 <- function(A, m, n) {
kronecker(matrix(1, n, m), A)
}



repmat2 <- function(A, rc) {
   repmat1(A, rc[1], rc[2])
}

repmat3 <- function(A, n) {
   repmat1(A, n, n)
}

Suggestions?


---------------------------------------------------------- SIGSIG -- signature too long (core dumped)

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html





--
Dipl. bio-chem. Witold Eryk Wolski MPI-Moleculare Genetic
Ihnestrasse 63-73 14195 Berlin _
tel: 0049-30-83875219 'v'
http://www.molgen.mpg.de/~wolski / \
mail: [EMAIL PROTECTED] ---W-W----
[EMAIL PROTECTED]


______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to