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)}
}
/EPaul 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
