On 03/11/2011 02:07 AM, Andreas Borg wrote: > Hi all, > > I have a function which makes use of missing() to determine which > arguments are provided in the call - basically, there are two sets of > arguments that map to different strategies the function uses to fulfill > its task. After conversion to an S4 generic I've run into the problem > that if a method uses extra arguments that are not in the signature of > the generic, usage of missing() fails. The following example exemplifies > this: > > setGeneric("fun", function(x=0, y=0, ...) standardGeneric("fun")) > # both methods should output if the second argument is missing > setMethod("fun", "character", function(x=0, y=0, ...) missing(y)) > setMethod("fun", "numeric", function(x=0, y=0, z=0, ...) missing(y)) > > fun("a") # this works fine > fun(1) # this gives "FALSE
Hi Andreas -- if you're testing for the missing-ness of y, and y is in the function signature, then use that for dispatch setMethod(fun, c("character", "missing"), function(x=0, y=0, z=0, ...) "missing") setMethod(fun, c("character", "ANY"), function(x=0, y=0, z=0, ...) "not missing") Since you're dispatching on x and y, it doesn't really make sense (to me ;) to assign default values to them. Testing for missing-ness of z would I think have to rely on NA / NULL or other sentinel. Martin > > I've understood so far that this is due to the fact that the "numeric" > method in this example is rewritten to: > > function (x = 0, y = 0, ...) > { > .local <- function (x = 0, y = 0, z = 0, ...) > missing(y) > .local(x, y, ...) > } > > The call to .local evaluates y and it is no more missing. > > Is there any alternative that works in this case? Or is there a chance > that missing() might be changed to work in this case in the near future? > > Of course I know I could set NA or NULL as default values and check for > these, but there are reasons I want to have legal default values for all > arguments. > > Best regards, > > Andreas > > Andreas Borg > Medizinische Informatik > > UNIVERSITÄTSMEDIZIN > der Johannes Gutenberg-Universität > Institut für Medizinische Biometrie, Epidemiologie und Informatik > Obere Zahlbacher Straße 69, 55131 Mainz > www.imbei.uni-mainz.de > > Telefon +49 (0) 6131 175062 > E-Mail: b...@imbei.uni-mainz.de > > Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte > Informationen. Wenn Sie nicht der > richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, > informieren Sie bitte sofort den > Absender und löschen Sie diese Mail. Das unerlaubte Kopieren sowie die > unbefugte Weitergabe > dieser Mail und der darin enthaltenen Informationen ist nicht gestattet. > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel -- 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