From andreas.borg at unimedizin-mainz.de  Fri Mar 11 11:07:00 2011
From: andreas.borg at unimedizin-mainz.de (Andreas Borg)
Date: Fri, 11 Mar 2011 11:07:00 +0100
Subject: [Rd] Using missing() in a S4 method with extra arguments
Message-ID: <4D79F444.4070904@unimedizin-mainz.de>

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

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: borg at 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.



[Rd] Using missing() in a S4 method with extra arguments
Andreas Borg