[Rd] selectMethod() can fail to find methods in situations of multiple dispatch

Michael Lawrence |@wrence@m|ch@e| @end|ng |rom gene@com
Fri Mar 22 05:29:46 CET 2019


If we started over, I'd try to avoid this sort of complexity, but "ANY"
truncation has been happening since at least 2003.

> matchSignature(c("numeric", "ANY"), foo)
        x
"numeric"

So I'm not sure we want to mess with it.

Michael

On Thu, Mar 21, 2019 at 8:14 PM Pages, Herve <hpages using fredhutch.org> wrote:

> Hi Michael,
>
> Thanks for looking into this. I suspect that truncation of ANY suffixes
> from method signatures is also the culprit behind the sudden breakage of
> aliases of the form \alias{foo,numeric-method} when a method without the
> ANY suffix in its signature gets added to the ecosystem. See my post about
> this to the Bioc-devel mailing list a couple of months ago:
> https://stat.ethz.ch/pipermail/bioc-devel/2019-January/014603.html
>
> So overall isn't this truncation more trouble than it's worth?
>
> H.
> On 3/19/19 10:12, Michael Lawrence wrote:
>
> This is due to the intentional truncation of ANY suffixes from method
> signatures. I've hacked selectMethod() to be robust to that and will commit
> soon. Thanks for the report.
>
> Michael
>
> On Thu, Mar 14, 2019 at 9:32 AM Pages, Herve <hpages using fredhutch.org> wrote:
>
>> Here is an example:
>>
>>   setGeneric("foo", function(x, y) standardGeneric("foo"))
>>
>>   setMethod("foo", c("numeric", "ANY"),
>>     function(x, y) cat("I'm the foo#numeric#ANY method\n")
>>   )
>>
>>
>> Dispatch works as expected but selectMethod() fails to find the method:
>>
>>
>>   > foo(1, TRUE)
>>   I'm the foo#numeric#ANY method
>>
>>   > selectMethod("foo", c("numeric", "logical"))
>>   Error in selectMethod("foo", c("numeric", "logical")) :
>>     no method found for signature numeric, logical
>>
>> Adding an arbitrary method that doesn't have ANY in the signature "fixes"
>> selectMethod():
>>
>>   setMethod("foo", c("complex", "integer"),
>>     function(x, y) cat("I'm the foo#complex#integer method\n")
>>   )
>>
>> Then:
>>
>>   > selectMethod("foo", c("numeric", "logical"))
>>   Method Definition:
>>
>>   function (x, y)
>>   cat("I'm the foo#numeric#ANY method\n")
>>
>>   Signatures:
>>         x         y
>>   target  "numeric" "logical"
>>   defined "numeric" "ANY"
>>
>>
>> Thanks,
>>
>> H.
>>
>>
>> --
>> Hervé Pagès
>>
>> Program in Computational Biology
>> Division of Public Health Sciences
>> Fred Hutchinson Cancer Research Center
>> 1100 Fairview Ave. N, M1-B514
>> P.O. Box 19024
>> Seattle, WA 98109-1024
>>
>> E-mail: hpages using fredhutch.org<mailto:hpages using fredhutch.org>
>> Phone:  (206) 667-5791
>> Fax:    (206) 667-1319
>>
>>
>>         [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-devel using r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=4e2MsIBoF9YnF3BCkiOk1m2kFgKBe24FwU28c-wuAyc&s=ydXNxAwEa5eG9lTu27sx-8KsT6gU66TbmJLcaYEaleg&e=>
>>
> --
> Hervé Pagès
>
> Program in Computational Biology
> Division of Public Health Sciences
> Fred Hutchinson Cancer Research Center
> 1100 Fairview Ave. N, M1-B514
> P.O. Box 19024
> Seattle, WA 98109-1024
>
> E-mail: hpages using fredhutch.org
> Phone:  (206) 667-5791
> Fax:    (206) 667-1319
>
>

	[[alternative HTML version deleted]]



More information about the R-devel mailing list