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 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.


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:


2018-02-20 19:33 GMT+01:00 Iñaki Úcar <>:
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, In, I'm trying to modify the dots and
forward the dispatch using NextMethod without any success. This is
what I've tried so far: <- function(..., recursive=FALSE) {
   dots <- list(...)
   # inspect and modify dots
   # ...
     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 is
exported by one package and is exported by another one, there's
no recursion, but 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 and in both cases).

I'm blocked here. Am I missing something? Is there a way of doing
this? Thanks in advance.


______________________________________________ mailing list

Reply via email to