[Bioc-devel] issue with .local() hack used in S4 methods

Martin Maechler m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Fri May 19 23:37:57 CEST 2023


>>>>> Hervé Pagès 
>>>>>     on Fri, 19 May 2023 11:43:50 -0700 writes:

    > Hi,

    > Just ran across this:

    >     foo <- function(x, ..., z=22) z

    >     setMethod("foo", "character", function(x, y=-5, z=22) y)
    >     # Creating a generic function from function ‘foo’ in the global 
    > environment

    > Then:

    >     foo("a")
    >     # [1] 22

    > Should return -5, not 22.

    > That's because the call to .local() used internally by the foo() method 
    > does not name the arguments placed after the ellipsis:

    >> selectMethod("foo", "character")
    > Method Definition:

    > function (x, ..., z = 22)
    > {
    >     .local <- function (x, y = 5, z = 22)
    >     y
    >     .local(x, ..., z)  <--- should be .local(x, ..., z=z)
    > }

    > Thanks,
    > H.


    >> sessionInfo()
    > R version 4.3.0 (2023-04-21)
  [...............]

I can confirm this *bug*  (also in R 4.2.z, R 4.1.z, R 3.6.3).

One might be tempted to say this falls into the
  "Doctor, it hurts when I do this --- then, don't do that!"
category.

Maybe a simple way to fix the would be to  forbid the  '...'
in S4 generics and methods apart from at the end,
or then make sure that after the ...  in the .local() call, all
argument must be named  {{as you suggest above}}.

Could you file a bug at R's bugzilla?
{I know we have too many open bugs there, notably related to S4,
 but still you'd do a service to the R community.}

Best,
Martin




    > -- 
    > Hervé Pagès

    > Bioconductor Core Team
    > hpages.on.github using gmail.com

    > _______________________________________________
    > Bioc-devel using r-project.org mailing list
    > https://stat.ethz.ch/mailman/listinfo/bioc-devel



More information about the Bioc-devel mailing list