From ggrothendieck at gmail.com  Wed Sep 27 23:02:07 2006
From: ggrothendieck at gmail.com (Gabor Grothendieck)
Date: Wed, 27 Sep 2006 17:02:07 -0400
Subject: [Rd] S3 methods for cbind/rbind
In-Reply-To: <200609271624.02523.vincent.goulet@act.ulaval.ca>
References: <200609271602.43138.vincent.goulet@act.ulaval.ca>
	<971536df0609271316t70f328b3mff010628817c7125@mail.gmail.com>
	<200609271624.02523.vincent.goulet@act.ulaval.ca>
Message-ID: <971536df0609271402l11365a7bie8c74bd32d96493b@mail.gmail.com>

Maybe you could use rbind2, which has an S4 generic in the methods
package, instead?

# BOD is a data frame built into R
foo <- structure(BOD, class = c("bar", "data.frame"))
setOldClass("bar")
setMethod("rbind2", signature(x = "bar", y = "bar"),
	  function(x, y) {
		cat("Hello!\n")
		class(x) <- class(y) <- "data.frame"
		rbind(x, y)
	})

# test
foo <- structure(BOD, class = c("bar", "data.frame"))
rbind2(foo, foo)


On 9/27/06, Vincent Goulet <vincent.goulet at act.ulaval.ca> wrote:
> Hum. Then, I need to be more accurate. My object is of class
> c("bar", "data.frame"). So, by virtue of ...
>
>     The dispatch algorithm is described in the source file
>     ('.../src/main/bind.c') as
>
>        1.  For each argument we get the list of possible class
>           memberships from the class attribute.
>
>        2.  We inspect each class in turn to see if there is an an
>           applicable method.
>
> ... rbind(foo) is never sent to rbind.bar(). So I guess my questions stand.
>
> Le Mercredi 27 Septembre 2006 16:16, Gabor Grothendieck a ?crit:
> > Actually you can add your own method.  See
> >
> > library(zoo)
> > rbind.zoo
> >
> > for an example.
> >
> > On 9/27/06, Vincent Goulet <vincent.goulet at act.ulaval.ca> wrote:
> > > I created a type of object similar to a data frame. In some
> > > circumstances, It needs special methods for "[" and "[<-" and rbind()
> > > (but not cbind()). Then I found this in the cbind()/rbind() man page:
> > >
> > >     The method dispatching is _not_ done via 'UseMethod()', but by
> > >     C-internal dispatching. Therefore, there is no need for, e.g.,
> > >     'rbind.default'.
> > >
> > > This seems to imply I cannot add my own method. Is there 1) a workaround
> > > to and 2) a rationale for this? (Other than creating a generic Rbind() or
> > > whatever, that is.)
> > >
> > > I'm using S3 methods.
> > >
> > > Thanks in advance!
> > >
> > > --
> > >  Vincent Goulet, Associate Professor
> > >  ?cole d'actuariat
> > >  Universit? Laval, Qu?bec
> > >  Vincent.Goulet at act.ulaval.ca   http://vgoulet.act.ulaval.ca
> > >
> > > ______________________________________________
> > > R-devel at r-project.org mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-devel
>
> --
>  Vincent Goulet, Associate Professor
>  ?cole d'actuariat
>  Universit? Laval, Qu?bec
>  Vincent.Goulet at act.ulaval.ca   http://vgoulet.act.ulaval.ca
>




[Rd] S3 methods for cbind/rbind
Gabor Grothendieck