[Rd] How to modify dots and dispatch NextMethod

Iñaki Úcar i.ucar86 at gmail.com
Wed Feb 21 14:16:52 CET 2018


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



-- 
Iñaki Úcar
http://www.enchufa2.es
@Enchufa2



More information about the R-devel mailing list