[Rd] Canonical S4 Method signature

Matthias Kohl Matthias.Kohl at uni-bayreuth.de
Fri Feb 11 10:40:44 CET 2005

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)?
>SIGSIG -- signature too long (core dumped)
>R-devel at stat.math.ethz.ch mailing list

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


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

setMethod("foo", signature(m = "missing", n = "numeric"),
        # do something
        # for example

setMethod("foo", signature(m = "numeric", n = "numeric"),
    function(m, n){ 
        # do something
        # for example

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

More information about the R-devel mailing list