[Rd] How to modify dots and dispatch NextMethod

Tomas Kalibera tomas.kalibera at gmail.com
Thu Feb 22 10:29:10 CET 2018


The example is invoking NextMethod via an anonymous function, which is 
not allowed (see documentation for NextMethod). Normally one gets a 
runtime error "'NextMethod' called from an anonymous function", but not 
here as the anonymous function is called via do.call. I will fix so that 
there is a runtime error in this case as well, thanks for uncovering 
this problem.

I don't think there is a way to replace (unnamed) arguments in dots for 
NextMethod.

Tomas

On 02/21/2018 02:16 PM, Iñaki Úcar wrote:
> I've set up a repo with a reproducible example of the issue described
> in my last email:
>
> https://github.com/Enchufa2/dispatchS3dots
>
> Iñaki
>
> 2018-02-20 19:33 GMT+01:00 Iñaki Úcar <i.ucar86 at gmail.com>:
>> Hi all,
>>
>> Not sure if this belongs to R-devel or R-package-devel. Anyways...
>>
>> Suppose we have objects of class c("foo", "bar"), and there are two S3
>> methods c.foo, c.bar. In c.foo, I'm trying to modify the dots and
>> forward the dispatch using NextMethod without any success. This is
>> what I've tried so far:
>>
>> c.foo <- function(..., recursive=FALSE) {
>>    dots <- list(...)
>>    # inspect and modify dots
>>    # ...
>>    do.call(
>>      function(..., recursive=FALSE) structure(NextMethod("c"), class="foo"),
>>      c(dots, recursive=recursive)
>>    )
>> }
>>
>> foobar <- 1
>> class(foobar) <- c("foo", "bar")
>> c(foobar, foobar)
>> Error: C stack usage  7970788 is too close to the limit
>>
>> There's recursion (!). But the funniest thing is that if c.foo is
>> exported by one package and c.bar is exported by another one, there's
>> no recursion, but c.bar is never called (!!). Why is the same code
>> behaving in a different way depending on whether these functions are
>> defined in the .GlobalEnv or in two attached packages? (BTW,
>> isS3method() is TRUE, for c.foo and c.bar in both cases).
>>
>> I'm blocked here. Am I missing something? Is there a way of doing
>> this? Thanks in advance.
>>
>> Regards,
>> Iñaki
>
>



More information about the R-devel mailing list