Dear Martin, I could not entirely follow your suggestion. I can see how you define two classes inheriting from TypeOfSample, and how these two classes have two associated methods (incidentally, I'm unfamiliar with the:
function(type,x=numeric(),...)to do. J expression. What is type? But then I'm lost. I wouldn't know how to carry on from here. I don't know if I have explained the key point clear enough before. For the person using "newsample" it makes sense which name (x or y or z, etc) is used. newsample(x=12.4) would give something different from newsample(y=12.4); and yet another result would be obtained if using a combination, like newsample(x=12.4,y=12.4). I wanted to use a simple function with default values at first, but I'm in the middle of developing a package using S4 formalism. I'm not sure this would be a wise thing ________________________________________ Sent: 14 February 2012 17:00 To: Foadi, James (Imperial Coll.,RAL,DIA) Cc: r-devel@r-project.org Subject: Re: [Rd] method using several (and different) arguments in turn On 02/14/2012 08:43 AM, james.fo...@diamond.ac.uk wrote: > Dear R-developers community, I have the following generic: > > setGeneric( > name="newsample", > > def=function(x,y,z,a,b,c,...){standardGeneric("newsample")} > > And I can build several methods for this generic. One useful thing is to use > "newsample" > with only one of the 6 arguments listed. At the moment this is what I do: > > setMethod( > f="newsample", > > signature=c("missing","missing","numeric","missing","missing","missing"), > function(x,y,z,a,b,c,...) > { > .............................. > .............................. > > } > ) > > This would be used when the single argument is z: > > newsample(z=12.5) > > To use newsample with another argument (say x) I should implement the same as > before, > but with signature > c("numeric","missing","missing","missing","missing","missing"). > Is there another shorter and easier way to do this? Hi James -- A matter of opinion, but multiple dispatch like this can be very complicated, e.g., figuring out the 'next' method when dispatching on two or more arguments; I'd really discourage it. A different approach, assuming that x, y, z, ... are all numeric() but that the sample to be drawn differs, is to define a small class hierarchy to be used for dispatch. setClass("TypeOfSample") setClass("XSample", contains="TypeOfSample") XSample <- new("XSample") ## a 'singleton', used for dispatch setClass("YSample", contains="TypeOfSample") YSample <- new("YSample") and then setGeneric("newsample", function(type, x=numeric(), ...) standardGeneric("newsample"), signature="type") setMethod("newsample", "XSample", function(type, x=numeric(), ...) { "XSample" }) setMethod("newsample", "YSample", function(type, x=numeric(), ...) { "YSample" }) One could implement a default method on "TypeOfSample", and use callNextMethod() after initial transformation, if that were the pattern. To use: newsample(XSample, x=1:100) Martin > > > J > -- Computational Biology Fred Hutchinson Cancer Research Center 1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109 Location: M1-B861 Telephone: 206 667-2793 -- This e-mail and any attachments may contain confidential...{{dropped:8}} ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel