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

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

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

Hervé Pagès-2
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: [hidden email]<mailto:[hidden email]>
Phone:  (206) 667-5791
Fax:    (206) 667-1319


        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: selectMethod() can fail to find methods in situations of multiple dispatch

R devel mailing list
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 <[hidden email]> 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: [hidden email]<mailto:[hidden email]>
> Phone:  (206) 667-5791
> Fax:    (206) 667-1319
>
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: selectMethod() can fail to find methods in situations of multiple dispatch

Hervé Pagès-2
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 <[hidden email]<mailto:[hidden email]>> 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: [hidden email]<mailto:[hidden email]><mailto:[hidden email]<mailto:[hidden email]>>
Phone:  (206) 667-5791
Fax:    (206) 667-1319


        [[alternative HTML version deleted]]

______________________________________________
[hidden email]<mailto:[hidden email]> 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: [hidden email]<mailto:[hidden email]>
Phone:  (206) 667-5791
Fax:    (206) 667-1319


        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: selectMethod() can fail to find methods in situations of multiple dispatch

R devel mailing list
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 <[hidden email]> 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 <[hidden email]> 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: [hidden email]<mailto:[hidden email]>
>> Phone:  (206) 667-5791
>> Fax:    (206) 667-1319
>>
>>
>>         [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> [hidden email] 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: [hidden email]
> Phone:  (206) 667-5791
> Fax:    (206) 667-1319
>
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: selectMethod() can fail to find methods in situations of multiple dispatch

Hervé Pagès-2
Fine with me as long as eliminating the inconveniences associated with it can be put on the roadmap. The alias instability and the fact that the user has no way to know if s/he should do ?`foo,numeric-method` or ?`foo,numeric,ANY-method` to find the method has been a long-standing problem.

H.

On 3/21/19 21:29, Michael Lawrence wrote:
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 <[hidden email]<mailto:[hidden email]>> 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<https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_pipermail_bioc-2Ddevel_2019-2DJanuary_014603.html&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=kjmNpPtpGtaMCrw8ubpy0siyz1xl8WY9gONjtL65IxE&s=R9Hi4Rm4nk-izYC8vDCj0NiuFdUMG4vZVbdQgsvxkDM&e=>

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 <[hidden email]<mailto:[hidden email]>> 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: [hidden email]<mailto:[hidden email]><mailto:[hidden email]<mailto:[hidden email]>>
Phone:  (206) 667-5791
Fax:    (206) 667-1319


        [[alternative HTML version deleted]]

______________________________________________
[hidden email]<mailto:[hidden email]> 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: [hidden email]<mailto:[hidden email]>
Phone:  (206) 667-5791
Fax:    (206) 667-1319


--
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: [hidden email]<mailto:[hidden email]>
Phone:  (206) 667-5791
Fax:    (206) 667-1319


        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: selectMethod() can fail to find methods in situations of multiple dispatch

R devel mailing list
Agreed but I'm not sure we want users accessing documentation with those
types of aliases. One option is the method?foo("numeric") syntax.

On Thu, Mar 21, 2019 at 9:52 PM Pages, Herve <[hidden email]> wrote:

> Fine with me as long as eliminating the inconveniences associated with it
> can be put on the roadmap. The alias instability and the fact that the user
> has no way to know if s/he should do ?`foo,numeric-method` or
> ?`foo,numeric,ANY-method` to find the method has been a long-standing
> problem.
>
> H.
> On 3/21/19 21:29, Michael Lawrence wrote:
>
> 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 <[hidden email]> 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
>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_pipermail_bioc-2Ddevel_2019-2DJanuary_014603.html&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=kjmNpPtpGtaMCrw8ubpy0siyz1xl8WY9gONjtL65IxE&s=R9Hi4Rm4nk-izYC8vDCj0NiuFdUMG4vZVbdQgsvxkDM&e=>
>>
>> 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 <[hidden email]>
>> 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: [hidden email]<mailto:[hidden email]>
>>> Phone:  (206) 667-5791
>>> Fax:    (206) 667-1319
>>>
>>>
>>>         [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> [hidden email] 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: [hidden email]
>> Phone:  (206) 667-5791
>> Fax:    (206) 667-1319
>>
>> --
> 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: [hidden email]
> Phone:  (206) 667-5791
> Fax:    (206) 667-1319
>
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: selectMethod() can fail to find methods in situations of multiple dispatch

Hervé Pagès-2
Good to know about the method?foo("numeric") syntax. And apparently it knows about inheritance! Thanks for mentioning that. I see it's documented in ?`?`... Darn! How could I miss it for so many years!

Note however that this syntax doesn't seem to work in case of "ANY" truncation so I won't be able to fully adopt this syntax for now:

> library(Matrix)

> showMethods("colSums")
Function: colSums (package base)
x="ANY"
x="CsparseMatrix"
x="ddenseMatrix"
x="denseMatrix"
x="dgCMatrix"
x="dgeMatrix"
x="diagonalMatrix"
x="igCMatrix"
x="indMatrix"
x="lgCMatrix"
x="ngCMatrix"
x="RsparseMatrix"
x="TsparseMatrix"

> method?colSums("dgCMatrix")
Error in .helpForCall(topicExpr, parent.frame(), FALSE) :
  no documentation for function ‘colSums’ and signature ‘x = "dgCMatrix", na.rm = "logical", dims = "numeric"’
In addition: Warning message:
In .helpForCall(topicExpr, parent.frame(), FALSE) :
  no method defined for function ‘colSums’ and signature ‘x = "dgCMatrix", na.rm = "logical", dims = "numeric"’

But maybe it uses selectMethod() behind the seen so will work once selectMethod() gets fixed?

Thanks,

H.


On 3/21/19 22:05, Michael Lawrence wrote:
Agreed but I'm not sure we want users accessing documentation with those types of aliases. One option is the method?foo("numeric") syntax.

On Thu, Mar 21, 2019 at 9:52 PM Pages, Herve <[hidden email]<mailto:[hidden email]>> wrote:

Fine with me as long as eliminating the inconveniences associated with it can be put on the roadmap. The alias instability and the fact that the user has no way to know if s/he should do ?`foo,numeric-method` or ?`foo,numeric,ANY-method` to find the method has been a long-standing problem.

H.

On 3/21/19 21:29, Michael Lawrence wrote:
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 <[hidden email]<mailto:[hidden email]>> 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<https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_pipermail_bioc-2Ddevel_2019-2DJanuary_014603.html&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=kjmNpPtpGtaMCrw8ubpy0siyz1xl8WY9gONjtL65IxE&s=R9Hi4Rm4nk-izYC8vDCj0NiuFdUMG4vZVbdQgsvxkDM&e=>

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 <[hidden email]<mailto:[hidden email]>> 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: [hidden email]<mailto:[hidden email]><mailto:[hidden email]<mailto:[hidden email]>>
Phone:  (206) 667-5791
Fax:    (206) 667-1319


        [[alternative HTML version deleted]]

______________________________________________
[hidden email]<mailto:[hidden email]> 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: [hidden email]<mailto:[hidden email]>
Phone:  (206) 667-5791
Fax:    (206) 667-1319


--
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: [hidden email]<mailto:[hidden email]>
Phone:  (206) 667-5791
Fax:    (206) 667-1319


--
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: [hidden email]<mailto:[hidden email]>
Phone:  (206) 667-5791
Fax:    (206) 667-1319


        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel