From hpages at fhcrc.org  Tue Sep  9 19:57:24 2008
From: hpages at fhcrc.org (Herve Pages)
Date: Tue, 09 Sep 2008 10:57:24 -0700
Subject: [Rd] Defining an alias for a generic function and callNextMethod()
 strange behaviour
Message-ID: <48C6B904.3010809@fhcrc.org>

Hi,

My package contains the following foo() generic and methods (simplified
version):

   setGeneric("foo", signature="x", function(x, y=NA) standardGeneric("foo"))
   setMethod("foo", "ANY", function(x, y=NA) list(x, y))
   setMethod("foo", "character", function(x, y=NA) unlist(callNextMethod()))

   > foo(5)
   [[1]]
   [1] 5

   [[2]]
   [1] NA

   > foo("a")
   [1] "a" NA

And I want to define a temporary alias for foo() for backward
compatibility with some existing code:

   oldfoo <- function(...) { .Deprecated("foo"); foo(...) }

   > oldfoo(5)
   [[1]]
   [1] 5

   [[2]]
   [1] NA

   Warning message:
   'oldfoo' is deprecated.
   Use 'foo' instead.
   See help("Deprecated")

   > oldfoo("a")
   Error in .nextMethod() : argument "x" is missing, with no default
   In addition: Warning message:
   'oldfoo' is deprecated.
   Use 'foo' instead.
   See help("Deprecated")

Why isn't this working?

One way to make this work is to specify the arguments in the call
to callNextMethod(), or in the definition of the oldfoo alias.
But wouldn't that be nice to be able to just use
fooalias <- function(...) foo(...) for aliasing?

Thanks!
H.


R version 2.7.0 (2008-04-22)
i686-pc-linux-gnu

locale:
LC_CTYPE=en_CA.UTF-8;LC_NUMERIC=C;LC_TIME=en_CA.UTF-8;LC_COLLATE=en_CA.UTF-8;LC_MONETARY=C;LC_MESSAGES=en_CA.UTF-8;LC_PAPER=en_CA.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_CA.UTF-8;LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base



[Rd] Defining an alias for a generic function and callNextMethod() strange behaviour
Herve Pages