[R] S4 method dispatch matrixOrArray

Gabor Grothendieck ggrothendieck at gmail.com
Wed Apr 12 19:34:50 CEST 2006


I think its good enough to just define an array method, i.e. you
don't need the matrix method or the matrixOrArray class, and the
vector method can call foo(matrix(A,1), ...) so:

setGeneric("foo",
          function(A, ...) {
              cat("generic", match.call()[[1]], "\n")
              standardGeneric("foo")
          })

setMethod("foo",
         signature(A = "array"),
         function(A, ...) {
             cat("A =", A, "\n")
         })

setMethod("foo",
         signature(A = "vector"),
         function(A, ...) {
             foo(matrix(A, nrow = 1), ...)
         })

## Test
foo(1:4)
foo(matrix(1:4, 1, 4))
foo(array(1:4, c(1, 4, 1)))


On 4/12/06, Paul Roebuck <roebuck at mdanderson.org> wrote:
> I have some code where the primary dispatching is on
> other parameters so I'd like not to have to create a
> set of functions for "matrix" and another duplicate
> set for "array". But the class union technique isn't
> working as implemented below and I don't have my Green
> book with me. How do I fix my infinite recursion problem?
>
>
> ##--------------------------------------------------------
> library(methods)
>
> setGeneric("foo",
>           function(A, ...) {
>               cat("generic", match.call()[[1]], "\n")
>               standardGeneric("foo")
>           })
>
> setMethod("foo",
>          signature(A = "vector"),
>          function(A, ...) {
>              callGeneric(matrix(A, nrow = 1), ...)
>          })
>
> setClassUnion("matrixOrArray", c("matrix", "array"))
>
> setMethod("foo",
>          signature(A = "matrixOrArray"),
>          function(A, ...) {
>              cat("A =", A, "\n")
>          })
>
> ## Test
> foo(1:4)
> foo(matrix(1:4, 1, 4))
> foo(array(1:4, c(1, 4, 1)))
>
> ----------------------------------------------------------
> SIGSIG -- signature too long (core dumped)
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>




More information about the R-help mailing list