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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel