From i.ucar86 at gmail.com  Tue Feb 20 19:33:34 2018
From: i.ucar86 at gmail.com (=?UTF-8?B?ScOxYWtpIMOaY2Fy?=)
Date: Tue, 20 Feb 2018 19:33:34 +0100
Subject: [Rd] How to modify dots and dispatch NextMethod
Message-ID: <CALEXWq2tL2qxLee_1MhRQcqmeUXe5BfnxCjZQM5RTkB7ccD7PA@mail.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



[Rd] How to modify dots and dispatch NextMethod
=?UTF-8?B?ScOxYWtpIMOaY2Fy?=