[Rd] [R] combining tables

Gabor Grothendieck ggrothendieck at gmail.com
Tue Jun 20 13:01:31 CEST 2006


On 6/20/06, Robin Hankin <r.hankin at noc.soton.ac.uk> wrote:
> On 19 Jun 2006, at 12:45, Gabor Grothendieck wrote:
> > Try this:
> >
> > both <- c(x,y)
> > as.table(tapply(both, names(both), sum))
>
>
> thanks for this, Gabor.
>
> The class of the objects I am manipulating in my
> package is c("count", "table").
>
> It'd be nice to overload the "+" symbol so that I can add
> two count objects like this with a simple "x+y".  To this end, I
> defined a Ops.count() function that executed Gabor's summation.
>
> But, this broke all sorts of functionality in the package,
> because the ">" relation was not defined in my Ops.count()
> function.
>
> In my case, the only operation that I want to redefine is "+".
> I want to leave all the others unchanged.
>
> What is Best Practice for redefining just one binary operator?
>
>
>
> >
> > On 6/19/06, Robin Hankin <r.hankin at noc.soton.ac.uk> wrote:
> >> Hi
> >>
> >> Suppose I have two tables of counts of different animals and I
> >> wish to pool them so the total of the sum is the sum of the total.
> >>
> >> Toy example follows (the real ones are ~10^3 species and ~10^6
> >> individuals).
> >> x and y are zoos that have merged and I need a combined inventory
> >> including animals that are temporarily absent.
> >>
> >>
> >>  > (x <- as.table(c(cats=3,squid=7,pigs=2,dogs=1,slugs=0)))
> >> cats squid  pigs  dogs slugs
> >>     3     7     2     1     0
> >>  > (y <- as.table(c(cats=4,dogs=5,slugs=3,crabs=0)))
> >> cats  dogs slugs crabs
> >>     4     5     3     0
> >>  > (desired.output <- as.table(c
> >> (cats=7,squid=7,pigs=2,dogs=6,slugs=3,crabs=0)))
> >> cats squid  pigs  dogs slugs crabs
> >>     7     7     2     6     3     0
> >>  >
> >>
> >>
> >>
> >>
> >> Note that we have 7 cats altogether, and the crabs correctly show
> >> as zero counts.
> >>
> >>
> >> How to do this nicely in R?

This will define + but not the others:

"+.count" <- function(x,y) {
	both <- c(x,y)
	as.table(tapply(both, names(both), sum))
}



More information about the R-devel mailing list