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

Hervé Pagès hp@ge@@on@g|thub @end|ng |rom gm@||@com
Sat May 20 11:53:40 CEST 2023


oops, wrong list sorry. I meant to send this to the R-devel list. Done now.

@Martin FWIW I worked around this by keeping the ellipsis in the arg 
list of the method:

  > setMethod("foo", "raw", function(x, y=-5, ..., z=22) y)
 > selectMethod("foo", "raw")
Method Definition:

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

Signatures:
         x
target  "raw"
defined "raw"

 > foo(raw(1))
[1] -5

Best,

H.


On 5/19/23 14:37, Martin Maechler wrote:
>>>>>> 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

-- 
Hervé Pagès

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



More information about the Bioc-devel mailing list