Re: [Rd] Canonical S4 Method signature

From: Matthias Kohl <Matthias.Kohl_at_uni-bayreuth.de>
Date: Fri 11 Feb 2005 - 20:40:44 EST

Paul Roebuck schrieb:

>I have trouble finding applicable examples of S4 methods.
>Could someone tell me the canonical method for a function
>that takes either one or two arguments corresponding to
>dimensions? So if vector output desired, only one argument
>'n' would be provided. For matrix, two would be provided
>corresponding to 'm' and 'n' in that order. And therein
>lies the rub as I don't really want to require specifying
>the argument name in order to do this.
>
>foo(3) # n = 3
>foo(3, 4) # m = 3, n = 4
>foo(n = 3, 4) # m = 4, n = 3
>
>What I have come up with thus far is below but that reverses
>the order for second case. I could swap them internally if
>I knew whether they were specified by name.
>
>setGeneric("foo", function(n, m = n) {
> cat("generic", match.call()[[1]], "\n")
> standardGeneric("foo")
>})
>
>One other alternative might be to just use dots for the
>function argument and assign them names internally.
>
>Similar functions in some package? Suggestions (besides
>not using S4)?
>
>TIA
>
>----------------------------------------------------------
>SIGSIG -- signature too long (core dumped)
>
>______________________________________________
>R-devel@stat.math.ethz.ch mailing list
>https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
>
Hi,

maybe the following is a starting point and comes close to what you want ...

Matthias

if(!isGeneric("foo"))

    setGeneric("foo", function(m, n) standardGeneric("foo"))

setMethod("foo", signature(m = "missing", n = "numeric"),

    function(n){

        # do something
        # for example
        print(n)

    })

setMethod("foo", signature(m = "numeric", n = "numeric"),

    function(m, n){

        # do something
        # for example
        print(m)
        print(n)

    })

foo(3, 4)
foo(n = 3, 4)
# unfortunatelly you have to do
foo(,3)
# or
foo(n = 3)



R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Fri Feb 11 18:46:02 2005

This archive was generated by hypermail 2.1.8 : Fri 11 Feb 2005 - 19:27:26 EST