On 10/26/2010 03:53 AM, Robin Hankin wrote:> Hello.
>
> I am trying to write an S4 method for rbind(). I have a class of objects
> called 'mdm', and I want to be able to rbind() them to one another.
>
> I do not want the method for rbind() to coerce anything to an mdm object.
> I want rbind(x1,x2,x1,x2) to work as expected [ie rbind() should take any
> number of arguments].
>
> This is what I have so far:
>
>
> setGeneric(".rbind_pair",
function(x,y){standardGeneric(".rbind_pair")})
> setMethod(".rbind_pair", c("mdm", "mdm"),
function(x,y){.mdm.cPair(x,y)})
> setMethod(".rbind_pair", c("mdm", "ANY"),
> function(x,y){.mdm_rbind_error(x,y)})
> setMethod(".rbind_pair", c("ANY", "mdm"),
> function(x,y){.mdm_rbind_error(x,y)})
> setMethod(".rbind_pair", c("ANY", "ANY"),
> function(x,y){.mdm_rbind_error(x,y)})
>
> ".mdm_rbind_error" <- function(x,y){
> stop("an mdm object may only be rbinded to another mdm object")
> }
>
> ".mdm.rbind_pair" <- function(x,y){
> stopifnot(compatible(x,y))
> mdm(rbind(xold(x),xold(y)),c(types(x),types(y))) # this is the
"meat" of
> the rbind functionality
> }
>
> setGeneric("rbind")
> setMethod("rbind", signature="mdm", function(x, ...) {
> if(nargs()<3)
> .mdm_rbind_pair(x,...)
> else
> .mdm_rbind_pair(x, Recall(...))
> })
>
>
> But
>
>
> LE223:~/packages% sudo R CMD INSTALL ./multivator
> [snip]
> Creating a new generic function for "tail" in
"multivator"
> Error in conformMethod(signature, mnames, fnames, f, fdef, definition) :
> in method for ?rbind? with signature ?deparse.level="mdm"?:
formal
> arguments (... = "mdm", deparse.level = "mdm") omitted
in the method
> definition cannot be in the signature
Hi Robin
try getGeneric("rbind") and showMethods("rbind") after your
setGeneric;.
The generic is dispatching on 'deparse.level'. 'deparse.level'
is
missing from your method definition, and so can't be used as the
signature for your method. Try to set the ... explicitly as the
signature to be used for dispatch.
setGeneric("rbind",
function(..., deparse.level=1) standardGeneric("rbind"),
signature = "...")
Martin
> Error : unable to load R code in package 'multivator'
> ERROR: lazy loading failed for package ?multivator?
> * removing ?/usr/local/lib64/R/library/multivator?
> * restoring previous ?/usr/local/lib64/R/library/multivator?
> LE223:~/packages%
>
>
> I can't understand what the error message is trying to say.
>
> Can anyone advise on a fix for this?
>
>
--
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109
Location: M1-B861
Telephone: 206 667-2793