>>>>> "Spencer" == Spencer Graves <[EMAIL PROTECTED]>
>>>>>     on Mon, 17 Feb 2003 17:43:23 -0800 writes:

    Spencer> Hello: I'm not on the "r-devel" list, but I just
    Spencer> modified "match.arg" from R 1.6.2 for Windows to
    Spencer> accept a vector for "arg".

    Spencer>      Is it appropriate that I send such things to
    Spencer> this email address for consideration for inclusion
    Spencer> in a future release?

yes (using "R-devel" for ...). 
But why is this current proposal really useful?
Note that I can't see reason to match more than one argument to the
*same* list of choices. `choices' already is a vector typically...

Making a function more complicated makes it also more
error-prone, so I think we'd need a good motivation for it.
E.g., your proposal below quite badly fails when
length(arg) == 0, since you've used the ``well-known to be unsafe''
1:length(arg) idiom instead of the safe  seq(length= length(arg)) one.

Regards,
Martin

    Spencer>      I just compared this with "match.arg" in
    Spencer> S-Plus 6.1 for Windows.  There, I got the
    Spencer> following:

    >> match.arg(c("a","b"), c("aa", "bb"))
    Spencer> [1] "aa" "bb"




    Spencer>      However, match.arg(c("a", "b")) in a test
    Spencer> function with "default" = c("aa", "bb") returned
    Spencer> only "a"; the following returns c("aa", "bb").

    Spencer> Thanks for all your hard work in developing this
    Spencer> marvelous product.

    Spencer> Sincerely, Spencer Graves

    match.arg <-
    function (arg, choices)
    {
         if (missing(choices)) {
             formal.args <- formals(sys.function(sys.parent()))
             choices <- eval(formal.args[[deparse(substitute(arg))]])
         }
    #    cat("choices =", choices, "\n")
             for(j in 1:length(arg)){
                if (all(arg[j] == choices))
                 arg[j] <- choices[1]
                     else{
                        i <- pmatch(arg[j], choices)
                     if (is.na(i))
                      stop(paste("ARG should be one of", paste(choices, collapse = 
    ", "),
                               sep = " "))
                        if (length(i) > 1)
                         stop("there is more than one match in match.arg")
                     arg[j] <- choices[i]
                    }
            }
            arg
    }

______________________________________________
[EMAIL PROTECTED] mailing list
http://www.stat.math.ethz.ch/mailman/listinfo/r-devel

Reply via email to