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

Andrzej Oleś andrzej.oles at gmail.com
Tue Aug 8 23:37:00 CEST 2017


Awesome, thank you Michael!

On Mon, Aug 7, 2017 at 7:27 PM, Michael Lawrence <lawrence.michael at gene.com>
wrote:

> I ported that over.
>
> On Tue, Aug 1, 2017 at 5:50 AM, Andrzej Oleś <andrzej.oles at gmail.com>
> wrote:
>
>> 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-callnextmeth
>>> od-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