[Rd] Problems with S4 methods dispatching on `...` (aka dotsMethods)

Andrzej Oleś andrzej.oles at gmail.com
Tue Aug 1 14:50:06 CEST 2017


Thank you Michael for updating the 3.4 branch, the `callNextMethod()` now
works for `...` methods as expected. However, I'm still missing your other
patch fixing the handling of arguments in `...` methods. It would be really
great if this bugfix could be integrated into the 3.4 branch as well, such
that the following code doesn't result in an error.

Cheers,
Andrzej


    f = function(x, ..., a = b) {
      b = "missing 'a'"
      print(a)
    }

    f()
    ## [1] missing 'a'

    f(a = 1)
    ## [1] 1

    setGeneric("f", signature = "x")

    # works as the non-generic version
    f()
    ## [1] missing 'a'

    setGeneric("f", signature = "...")

    # unexpectedly fails to find 'b'
    f()
    ## Error in print(a) : object 'b' not found


On Fri, Jul 28, 2017 at 9:15 PM, Michael Lawrence <lawrence.michael at gene.com
> wrote:

> I pushed the patch to the 3.4 branch. Feel free to test.
>
> Michael
>
> On Wed, Jul 26, 2017 at 4:02 AM, Andrzej Oleś <andrzej.oles at gmail.com>
> wrote:
> > Hi Michael,
> >
> > it seems that your patch to S4 generics dispatching on `...` is still
> > available only in R-devel, and was not included in the minor R-3.4.1
> > release. I was wondering what is the policy of incorporating bug fixes
> from
> > the devel branch into release, and whether there is any chance that the
> > broken `...` dispatch is fixed before R-3.5.0?
> >
> > Cheers,
> > Andrzej
> >
> >
> > On Tue, Apr 25, 2017 at 4:15 PM, Andrzej Oleś <andrzej.oles at gmail.com>
> > wrote:
> >>
> >> You're right, I must have mixed up my R versions when running the
> example,
> >> as the problem seems to be resolved in R-devel.
> >>
> >> Sorry for the noise and thanks again for fixing this.
> >>
> >> Andrzej
> >>
> >> On Tue, Apr 25, 2017 at 3:55 PM, Michael Lawrence
> >> <lawrence.michael at gene.com> wrote:
> >>>
> >>> I attempted to fix it, and that example seems to work for me. It's
> >>> also a (passing) regression test in R. Are you sure you're using a new
> >>> enough R-devel?
> >>>
> >>>
> >>> On Tue, Apr 25, 2017 at 2:34 AM, Andrzej Oleś <andrzej.oles at gmail.com>
> >>> wrote:
> >>> > Hi Michael,
> >>> >
> >>> > thanks again for your patch! I've tested it and I'm happy to confirm
> >>> > that
> >>> > `callNextMethod()` works with methods dispatching on `...`.
> >>> >
> >>> > However, the second issue I reported still seems to be unresolved.
> >>> > Consider
> >>> > the following toy example, where the `f()` calls differ in result
> >>> > depending
> >>> > on whether the dispatch happens on a formal argument or the `...`
> >>> > argument.
> >>> >
> >>> >
> >>> >     f = function(x, ..., a = b) {
> >>> >       b = "missing 'a'"
> >>> >       print(a)
> >>> >     }
> >>> >
> >>> >     f()
> >>> >     ## [1] missing 'a'
> >>> >
> >>> >     f(a = 1)
> >>> >     ## [1] 1
> >>> >
> >>> >     setGeneric("f", signature = "x")
> >>> >
> >>> >     # works as the non-generic version
> >>> >     f()
> >>> >     ## [1] missing 'a'
> >>> >
> >>> >     setGeneric("f", signature = "...")
> >>> >
> >>> >     # unexpectedly fails to find 'b'
> >>> >     f()
> >>> >     ## Error in print(a) : object 'b' not found
> >>> >
> >>> >
> >>> > Any chances of fixing this?
> >>> >
> >>> > Cheers,
> >>> > Andrzej
> >>> >
> >>> >
> >>> >
> >>> > On Fri, Apr 21, 2017 at 11:40 AM, Andrzej Oleś <
> andrzej.oles at gmail.com>
> >>> > wrote:
> >>> >>
> >>> >> Great, thanks Michael for you quick response!
> >>> >>
> >>> >> I started off with a question on SO because I was not sure whether
> >>> >> this
> >>> >> was an actual bug or I was just missing something obvious. I'm
> looking
> >>> >> forward to the patch.
> >>> >>
> >>> >> Cheers,
> >>> >> Andrzej
> >>> >>
> >>> >>
> >>> >> On Thu, Apr 20, 2017 at 10:28 PM, Michael Lawrence
> >>> >> <lawrence.michael at gene.com> wrote:
> >>> >>>
> >>> >>> Thanks for pointing out these issues. I have a fix that I will
> commit
> >>> >>> soon.
> >>> >>>
> >>> >>> Btw, I would never have seen the post on Stack Overflow. It's best
> to
> >>> >>> report bugs on the bugzilla.
> >>> >>>
> >>> >>> Michael
> >>> >>>
> >>> >>> On Thu, Apr 20, 2017 at 8:30 AM, Andrzej Oleś
> >>> >>> <andrzej.oles at gmail.com>
> >>> >>> wrote:
> >>> >>> > Hi all,
> >>> >>> >
> >>> >>> > I recently encountered some unexpected behavior with S4 generics
> >>> >>> > dispatching on `...`, which I described in
> >>> >>> >
> >>> >>> >
> >>> >>> > http://stackoverflow.com/questions/43499203/use-
> callnextmethod-with-dotsmethods
> >>> >>> >
> >>> >>> > TL;DR: `callNextMethod()` doesn't work in methods dispatching on
> >>> >>> > `...`,
> >>> >>> > and
> >>> >>> > arguments of such methods are resolved differently than the
> >>> >>> > arguments
> >>> >>> > of
> >>> >>> > methods dispatching on formal arguments.
> >>> >>> >
> >>> >>> > Could this indicate a potential problem with the implementation
> of
> >>> >>> > the
> >>> >>> > `...` dispatch?
> >>> >>> >
> >>> >>> > Cheers,
> >>> >>> > Andrzej
> >>> >>> >
> >>> >>> >         [[alternative HTML version deleted]]
> >>> >>> >
> >>> >>> > ______________________________________________
> >>> >>> > R-devel at r-project.org mailing list
> >>> >>> > https://stat.ethz.ch/mailman/listinfo/r-devel
> >>> >>
> >>> >>
> >>> >
> >>
> >>
> >
>

	[[alternative HTML version deleted]]



More information about the R-devel mailing list